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

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

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Суть лока в том, что пока 1 поток с ним работает, другие ожидают. Как правило чтение лочить не обязательно, взять строку с удалением в многопотоке корректно работает. А вот запись лучше лочить.
Вот пример записи.

C#:
var List1 = project.Lists["Список"];
var url2 = project.Variables["Переменная"].Value;
lock(SyncObjects.ListSyncer)
{
   if (url2 != "")
   {
   List1.Add(url2);
     return "Ok";
   }
}
 

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Это кто такому научил?)
В 200 потоков, с интервалом 5 секунд. Корректно берет с удалением из списка. А если скорости выше, то списки не потянут просто на просто и нужно будет переходить на БД.
 

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63
В 200 потоков, с интервалом 5 секунд. Корректно берет с удалением из списка. А если скорости выше, то списки не потянут просто на просто и нужно будет переходить на БД.
В любом случае это не правильный совет, что при чтении лочить необязательно.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
В любом случае это не правильный совет, что при чтении лочить необязательно.
Зависит от задач. Если со списком производится исключительно чтение строк с удалением, то очень даже правильный.
 

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63
Зависит от задач. Если со списком производится исключительно чтение строк с удалением, то очень даже правильный.
Это атомарная операция? (В контексте списа зенно и без лока)
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Регистрация
11.10.2017
Сообщения
147
Благодарностей
7
Баллы
18
Не работает). Я когда делал давно, то без паузы в секунду (которую потом поставил) список выдавал ошибку.
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Регистрация
11.10.2017
Сообщения
147
Благодарностей
7
Баллы
18

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Регистрация
11.10.2017
Сообщения
147
Благодарностей
7
Баллы
18

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Регистрация
11.10.2017
Сообщения
147
Благодарностей
7
Баллы
18

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
всё ок везде. Может я что то не так делаю?Посмотреть вложение 38295
1) не уверен допустимы ли пробелы в названии, попробуйте переименовать список.
2) в пути нету "\", добавьте. В самом пути не допустимы квадратные скобки (проверьте путь)

В логе ошибку если пишет, то какую покажите.
 
Регистрация
11.10.2017
Сообщения
147
Благодарностей
7
Баллы
18
1) не уверен допустимы ли пробелы в названии, попробуйте переименовать список.
2) в пути нету "\", добавьте. В самом пути не допустимы квадратные скобки (проверьте путь)

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

В логе ошибку если пишет, то какую покажите.
Нашел где косяк. Я в настройках делал галку что бы у меня обнулялось. То есть список очищался и соответственно файл. Потом каждый поток записывал одно и то же значение. Галку снял и все правильно пошло. Огромное спасибо за помощь. Так бы я еще долго не сообразил). Многопоточность мне очень важна, потому еще раз огромнейшее спасибо !!! Теперь надо как то обнуление безошибочное сделать
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Нашел где косяк. Я в настройках делал галку что бы у меня обнулялось. То есть список очищался и соответственно файл. Потом каждый поток записывал одно и то же значение. Галку снял и все правильно пошло. Огромное спасибо за помощь. Так бы я еще долго не сообразил). Многопоточность мне очень важна, потому еще раз огромнейшее спасибо !!! Теперь надо как то обнуление безошибочное сделать
Это нормально, одна мелочь может поломать всю логику, по этому надо все проверять, какие данные в списке, в переменных и т.д.
 
Регистрация
11.10.2017
Сообщения
147
Благодарностей
7
Баллы
18
Это нормально, одна мелочь может поломать всю логику, по этому надо все проверять, какие данные в списке, в переменных и т.д.
вот я и не подумал). Делал под многопоток, а не учел что абсолютно все повторяется. В том числе и удаление файла
 
  • Спасибо
Реакции: Mikhail B.
Регистрация
11.10.2017
Сообщения
147
Благодарностей
7
Баллы
18
Это нормально, одна мелочь может поломать всю логику, по этому надо все проверять, какие данные в списке, в переменных и т.д.
А как же сделать тогда, что бы только один поток ставил 0. Нужно что бы раз в сутки или если галка стоит в настройках то счетчик обнуляется. Ничего в голову не лезет
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
А как же сделать тогда, что бы только один поток ставил 0. Нужно что бы раз в сутки или если галка стоит в настройках то счетчик обнуляется. Ничего в голову не лезет
https://zennolab.com/discussion/threads/ne-zarabatyvaem-no-uchimsja-vsemoguschestvu-s-c-90-snippetov-obnovleno.37483/#post-279558
 
  • Спасибо
Реакции: Castaneda

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
Регистрация
11.10.2017
Сообщения
147
Благодарностей
7
Баллы
18
Если я правильно вас понял.
А не подскажете как аналогично лочить призаписи в таблицу ? И если есть источник где почитать про локи? Вот тут на сайте было. Не могу найти манул и все тут)
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 303
Благодарностей
5 421
Баллы
113
А не подскажете как аналогично лочить призаписи в таблицу ? И если есть источник где почитать про локи? Вот тут на сайте было. Не могу найти манул и все тут)
Таблицы не лочу, т.к. они капризны. Лучше писать в список а потом в конце работы импортировать в таблицу.

Вот статья про локи https://zennolab.com/discussion/threads/osobennosti-ispolzovanija-standartnyx-lockov-dlja-mnogopotoka.44524/
 
Регистрация
11.10.2017
Сообщения
147
Благодарностей
7
Баллы
18
  • Спасибо
Реакции: Mikhail B.

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