Я конечно не гуру С#, но мне кажется лочить локальную переменную не самая лучшая идея для работы в многопотоке.
Во всех примерах используются общие объекты, объявленные в общем коде или в общем классе зенки.... А у тебя в примере непойми что и сбоку бантик
Т.е. ты не разбираешься, но решил выразить своё авторитетное мнение? Молодец, что тут скажешь
Чем тебе не нравится лок локальной переменной? Если посмотреть внимательно для чего она, то всё становится понятно. Если мы будем определять индекс строки, с которой будем работать вне лока, то однажды получим исключение "Индекс находился за пределами диапазона", потому что другой поток уже может удалить строку с этим индексом (например, она была последней). А то, что объявление переменной внутри лока, это ничего не меняет существенно.
Ты понимаешь смысл блокировки общими объектами? Если ты про SyncObjects.ListSyncer, то это общий объект для всех списков всех шаблонов, соответственно, общая очередь. Если ты про специально созданные статические объекты для блокировки public static object startListLocker = new object(); так в проекте есть кубик ниже того, что со стрелкой. Минусы подхода с блокировкой специально созданными локерами тоже есть: можно запутаться при наличии большого количества списков в шаблоне, если методы работы со списками вынесены в общий код, то дополнительно придётся прокидывать для работы с каждым списком свой локер, что также может вызвать путаницу.
По поводу бантика, посмотри внимательно пост, который процитирован и подумай ещё раз.
Доступ к объекту можно блокировать этим же самым объектом, в случае со списками/таблицами Зеннопостера это не так.
Все понятно, автор молодец!
Все же есть пару уточнений, старт шаблона, я привязал список и сделал лок списка №1, шаблон выполняется минут 15 (примерно) работает еще со списками, назовем их список №2, список№3, они тоже лакаются, проходит еще минут 10, шаблон дошел до самого конца, и надо добавить в список №1 строку, перед добавлением в список №1 надо его еще раз делать лок, ведь я уже делал лок в начале шаблона?
Но и другие потоки, тоже делали лок, списку №1 и другим спискам.
Лок нужно стремиться делать максимально коротким по времени, для совершения манипуляций со списком, поэтому, например, если нам надо взять строку с удалением из списка и потом распарсить её, то лочим мы только взятие и удаление, а парсим за пределами лока. Если же нам надо сделать изменения в части строки, то нам нужно взять строку, определить её индекс, удалить строку, сделать изменения в строке и вставить уже эту обновлённую строку в список по этому же индексу, всё это нужно будет проделать в пределах одного лока