Работа со списком в многопотоке

Регистрация
11.10.2017
Сообщения
147
Реакции
7
Баллы
18
Один раз реализовывал очень давно полноценную работу в пногопотоке со списками. Помню где то вычитал хороший мануал. Сейчас не могу найти конкретно того что нужно. Как лочить списки ? Есть запись в файл. То есть шаб читает в список число из файла увеличивает на единицу и другой поток повторяет. Ну что бы на каждый поток свой акк работал. Читал про локи к примеру со взятием строки , очисткой списка и тд. А просто залочить нельзя? Независимо от того, что список делает. Вот работает поток со списком сделал изменения и синхронизировалось с файлом. Что то не могу я найти подробной инфы. Подскажите кто знает)
 
Суть лока в том, что пока 1 поток с ним работает, другие ожидают. Как правило чтение лочить не обязательно, взять строку с удалением в многопотоке корректно работает. А вот запись лучше лочить.
Вот пример записи.

C#:
Развернуть Свернуть Копировать
var List1 = project.Lists["Список"];
var url2 = project.Variables["Переменная"].Value;
lock(SyncObjects.ListSyncer)
{
   if (url2 != "")
   {
   List1.Add(url2);
     return "Ok";
   }
}
 
Это кто такому научил?)
В 200 потоков, с интервалом 5 секунд. Корректно берет с удалением из списка. А если скорости выше, то списки не потянут просто на просто и нужно будет переходить на БД.
 
В 200 потоков, с интервалом 5 секунд. Корректно берет с удалением из списка. А если скорости выше, то списки не потянут просто на просто и нужно будет переходить на БД.
В любом случае это не правильный совет, что при чтении лочить необязательно.
 
В любом случае это не правильный совет, что при чтении лочить необязательно.
Зависит от задач. Если со списком производится исключительно чтение строк с удалением, то очень даже правильный.
 
Зависит от задач. Если со списком производится исключительно чтение строк с удалением, то очень даже правильный.
Это атомарная операция? (В контексте списа зенно и без лока)
 
Может на чтение еще залочить?
всё ок везде. Может я что то не так делаю? 122222.jpg
 
всё ок везде. Может я что то не так делаю?Посмотреть вложение 38295
1) не уверен допустимы ли пробелы в названии, попробуйте переименовать список.
2) в пути нету "\", добавьте. В самом пути не допустимы квадратные скобки (проверьте путь)

В логе ошибку если пишет, то какую покажите.
 
1) не уверен допустимы ли пробелы в названии, попробуйте переименовать список.
2) в пути нету "\", добавьте. В самом пути не допустимы квадратные скобки (проверьте путь)

В логе ошибку если пишет, то какую покажите.
все сделал как преложено было. Есть нюанс. При нажатии на три точки для выбора файла в папке проекта получается путь как на скрине плюс какой то шлак. Это я недавно удалял, но счел за свою ошибку. А получается фид такой: {-Project.Directory-}а\work.txt естественно так никакой файл не создается или создается непонять где. Попробовал в другой папке. Файл создается но записывает 5 одинаковых значений пропорционально количеству потоков. Сейчас пересмотрю еще шаблон внимательнее
 
1) не уверен допустимы ли пробелы в названии, попробуйте переименовать список.
2) в пути нету "\", добавьте. В самом пути не допустимы квадратные скобки (проверьте путь)

В логе ошибку если пишет, то какую покажите.
Нашел где косяк. Я в настройках делал галку что бы у меня обнулялось. То есть список очищался и соответственно файл. Потом каждый поток записывал одно и то же значение. Галку снял и все правильно пошло. Огромное спасибо за помощь. Так бы я еще долго не сообразил). Многопоточность мне очень важна, потому еще раз огромнейшее спасибо !!! Теперь надо как то обнуление безошибочное сделать
 
Нашел где косяк. Я в настройках делал галку что бы у меня обнулялось. То есть список очищался и соответственно файл. Потом каждый поток записывал одно и то же значение. Галку снял и все правильно пошло. Огромное спасибо за помощь. Так бы я еще долго не сообразил). Многопоточность мне очень важна, потому еще раз огромнейшее спасибо !!! Теперь надо как то обнуление безошибочное сделать
Это нормально, одна мелочь может поломать всю логику, по этому надо все проверять, какие данные в списке, в переменных и т.д.
 
Это нормально, одна мелочь может поломать всю логику, по этому надо все проверять, какие данные в списке, в переменных и т.д.
вот я и не подумал). Делал под многопоток, а не учел что абсолютно все повторяется. В том числе и удаление файла
 
  • Спасибо
Реакции: Mikhail B.
Это нормально, одна мелочь может поломать всю логику, по этому надо все проверять, какие данные в списке, в переменных и т.д.
А как же сделать тогда, что бы только один поток ставил 0. Нужно что бы раз в сутки или если галка стоит в настройках то счетчик обнуляется. Ничего в голову не лезет
 
  • Спасибо
Реакции: Castaneda
Если я правильно вас понял.
А не подскажете как аналогично лочить призаписи в таблицу ? И если есть источник где почитать про локи? Вот тут на сайте было. Не могу найти манул и все тут)
 
А не подскажете как аналогично лочить призаписи в таблицу ? И если есть источник где почитать про локи? Вот тут на сайте было. Не могу найти манул и все тут)
Таблицы не лочу, т.к. они капризны. Лучше писать в список а потом в конце работы импортировать в таблицу.

Вот статья про локи https://zennolab.com/discussion/thr...ja-standartnyx-lockov-dlja-mnogopotoka.44524/
 
  • Спасибо
Реакции: Mikhail B.

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