- Регистрация
- 09.08.2017
- Сообщения
- 461
- Благодарностей
- 198
- Баллы
- 43
Всем привет!
Каким образом лочится список?
Посмотрел почти все обсуждения на форуме,как я понял такая конструкция лочит список
Данный код берет строку от 0 до 6,и в многопотоке по идее пока из списка поток не заберет 6 значений список будет не тронут другими потоками.Так ли это?
Сделал тест.Собрал в список acc строки 1,2,3,4,5,6 и сделал повторения то есть в списке только эти цифры от 1 до 6.
Далее сделал 6 списков,назвал аналогично 1,2,3,4,5,6 .
Далее шаблон на старте берет из списка acc первую строку в переменную acc,и выполняет такой код
Как я понял список должен быть заблокирован пока поток не закончит выполнение данного действия.
Теперь запускаю шаблон в 6 потоков,и по идее должно получится в списке 1 строки 1,2,3,4,5,6,в списке 2 строки 7,8,9,10,11,12 и т.д.
Но так не получается,лок банально не работает как описано в темах на форуме.
Получаю в списках значения например 1,8,13,20,24,31.
Так же пробовал сделать как в конкурсной статье из 8 конкурса,но результаты одни и те же.
Пробовал на zp 5.10.6 и 5.15.0 ситуация одинакова.
Так как же лочит список в многопоток?
Каким образом лочится список?
Посмотрел почти все обсуждения на форуме,как я понял такая конструкция лочит список
Код:
lock(SyncObjects.ListSyncer)
{
var list = project.Lists["Baza"];
var otherlist = project.Lists["BazaEnd"];
for (int i = 0; i < 6; i++)
{
otherlist.Add(list[i]);
list.RemoveAt(i);
}
}
Сделал тест.Собрал в список acc строки 1,2,3,4,5,6 и сделал повторения то есть в списке только эти цифры от 1 до 6.
Далее сделал 6 списков,назвал аналогично 1,2,3,4,5,6 .
Далее шаблон на старте берет из списка acc первую строку в переменную acc,и выполняет такой код
Код:
var lists = project.Variables["acc"].Value;//номер из списка acc
lock(SyncObjects.ListSyncer) // начало лок
{
var list = project.Lists["Baza"];// Исходный список
var otherlist = project.Lists[lists];// один из 6 списков в зависимости от значения переменной acc
for (int i = 0; i < 6; i++) //берет из списка baza 6 строк
{
otherlist.Add(list[i]);//добавляет в один из списков полученную строку
list.RemoveAt(i);//удаляет из списка baza полученную строку
}
}//лок конец
Теперь запускаю шаблон в 6 потоков,и по идее должно получится в списке 1 строки 1,2,3,4,5,6,в списке 2 строки 7,8,9,10,11,12 и т.д.
Но так не получается,лок банально не работает как описано в темах на форуме.
Получаю в списках значения например 1,8,13,20,24,31.
Так же пробовал сделать как в конкурсной статье из 8 конкурса,но результаты одни и те же.
Пробовал на zp 5.10.6 и 5.15.0 ситуация одинакова.
Так как же лочит список в многопоток?