берет из списка дублями

daymos

Client
Регистрация
11.11.2009
Сообщения
806
Благодарностей
240
Баллы
43
Есть синхронизированный список 3к+ с уникальными айди. Шаблон в 100+ потоков берет в первом варианте строку №0 с удалением и записывает в конец файла. Во втором вариант берет строку номер random(0-100) с удалением и записывает в конец файла. В обеих вариантах попадается 10% дублей. Почему? Как быть?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
я не совсем понимаю, что значит 10% дублей? чтобы н ебыло дублей, нужно минусовать строки с конями, разве нет?
 

daymos

Client
Регистрация
11.11.2009
Сообщения
806
Благодарностей
240
Баллы
43
10% случаев он берет ту строку которую только что брал. т.е. два-три потока из 100 в эту минуту схватили первую строку.
т.е. 2-3 потока паралельно хватают первую строку с удалением до того как она будет удалена. из списка.

Стоит отметить что шаблон очень короткий. При 100 потоках он делает 20 исполнений.
и это не первый раз когда из таблицы/списка берется значения с удалением повторно.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113
не сталкивался, и помочь не могу. могу предложить альтернативу в виде глобальных счетчиков
 

sof

Client
Регистрация
15.04.2013
Сообщения
831
Благодарностей
184
Баллы
43
а ты берешь случайную строку? Можно еще дополнительно перемешать список перед повторным взятием
 

qzen4i

Client
Регистрация
01.05.2014
Сообщения
1 404
Благодарностей
313
Баллы
83
10% случаев он берет ту строку которую только что брал. т.е. два-три потока из 100 в эту минуту схватили первую строку.
т.е. 2-3 потока паралельно хватают первую строку с удалением до того как она будет удалена. из списка.

Стоит отметить что шаблон очень короткий. При 100 потоках он делает 20 исполнений.
и это не первый раз когда из таблицы/списка берется значения с удалением повторно.
http://zennolab.com/discussion/threads/rabota-so-spiskom-v-mnogopotoke.24596/#post-170177

А такой вариант? чтобы лочить список, пока 1 поток взял.
 

Leoneed

Client
Регистрация
03.05.2015
Сообщения
53
Благодарностей
38
Баллы
18
Ага... есть такой глюк... я в support уже отправлял свой шаблон с репортами, когда у меня такой глюк появился.
Сначала у меня был шаблон со списком около 90к строк из которого должна браться строка с удалением + таблица, в которую надо складывать результат - появились дубли в таблице в многопотоке.
Потом, в качестве эксперемента нарисовал шаблон, который использует всего 1 список из которого берет 1 строку с удалением, дальше работает с SQL.
В списке около 90К строк, некоторые потоки не успевают удалять строку - результат: в базу SQL тоже дубли идут.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
если лочишь то в локе паузу поставь небольшую что бы строка в файле перезаписалась до того как другой поток рванёт к этому файлу, когда много строк немного с задержкой перезаписывается
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Нужно понимание как организованы списки и какими экшенами ведется работа.
Приложите семпл проекта
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)