Многопоточность с единым списком

Faron

Client
Регистрация
15.12.2015
Сообщения
50
Благодарностей
1
Баллы
8
Приветствую.
До этого никогда не делал многопоточные шаблоны, которые будут использовать списки одновременно. То есть брать с них данные, записывать и удалять. Могут ли появиться какие то проблемы, когда несколько потоков будут пытаться одновременно записывать или удалять строки из списка?
 

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
254
Баллы
63
Проблемы запросто могут появиться на пустом месте, особенно если нет опыта работы с многопотоком.
Но это нормально, нет проблем только у того кто ничего не делает.
 

Dobrii

Client
Регистрация
31.03.2019
Сообщения
269
Благодарностей
130
Баллы
43
Приветствую.
До этого никогда не делал многопоточные шаблоны, которые будут использовать списки одновременно. То есть брать с них данные, записывать и удалять. Могут ли появиться какие то проблемы, когда несколько потоков будут пытаться одновременно записывать или удалять строки из списка?
Все задания становятся в очередь, сами по себе списки так понимаю не рассчитаны на многопоточный режим по умолчанию на уровне скажем так винды, поэтому только последовательное выполнение. Для многопоточных шаблонов как замечаю из практики, лучше всего использовать базы данных, не всегда удобно, но и зависит от задачи напрямую, при необходимости можно одним кубиком дергать с базы все данные в таблицы или списки.
 
Последнее редактирование:

Faron

Client
Регистрация
15.12.2015
Сообщения
50
Благодарностей
1
Баллы
8
Все задания становятся в очередь, сами по себе списки так понимаю не рассчитаны на многопоточный режим по умолчанию на уровне скажем так винды, поэтому только последовательное выполнение. Для многопоточных шаблонов как замечаю из практики, лучше всего использовать базы данных, не всегда удобно, но и зависит от задачи напрямую, при необходимости можно одним кубиком дергать с базы все данные в таблицы или списки.
То есть если один поток выполняет какие либо действия со списком, стандартным кубиком, второй ожидает, и приступает к работе, когда первый все сделал?
 

Dobrii

Client
Регистрация
31.03.2019
Сообщения
269
Благодарностей
130
Баллы
43
То есть если один поток выполняет какие либо действия со списком, стандартным кубиком, второй ожидает, и приступает к работе, когда первый все сделал?
Все верно, именно когда файл освободился от предыдущего задания, с ним начинает производить манипуляции второй поток. Как ранее уточнил, если планируется круглосуточная работа многопотока, то лучше базы данных юзать. Если это работа на 5-20 минут, то не думаю что минута+- по времени играет какую то роль.
 
  • Спасибо
Реакции: Faron

Alex91

Известная личность
Read only
Регистрация
15.08.2024
Сообщения
880
Благодарностей
254
Баллы
63
То есть если один поток выполняет какие либо действия со списком, стандартным кубиком, второй ожидает, и приступает к работе, когда первый все сделал?
Теоретически... Но почему то весь форум завален постами по типу... А-а-а-а-а помогите многопоток берет одну и туже строку из списка... Или а-а-а-а-а, помогите постоянные дубли в списке ;-)
 

Faron

Client
Регистрация
15.12.2015
Сообщения
50
Благодарностей
1
Баллы
8
Всем спасибо. Решил использовать снипеты, с локированием списков
 

alexman

Client
Регистрация
20.07.2017
Сообщения
46
Благодарностей
9
Баллы
8
Приветствую.
До этого никогда не делал многопоточные шаблоны, которые будут использовать списки одновременно. То есть брать с них данные, записывать и удалять. Могут ли появиться какие то проблемы, когда несколько потоков будут пытаться одновременно записывать или удалять строки из списка?
Опыт у меня не большой, мало чего понимаю в зенке, но многопоток прекрасно работает со списками, если они к файлу прикреплены, загружаются из файла, вносят в него изменения (все галочки нужно поставить). даже когда стартовал сразу с нескольких потоков - проблем не было.
 
  • Спасибо
Реакции: dioksidy и Sergodjan

femtoeu

Client
Регистрация
21.07.2022
Сообщения
1
Благодарностей
0
Баллы
1
Теоретически... Но почему то весь форум завален постами по типу... А-а-а-а-а помогите многопоток берет одну и туже строку из списка... Или а-а-а-а-а, помогите постоянные дубли в списке ;-)
А как правильно тогда работать с ним в многопотоке? Пробовал уже и через C# брать с локом, без галочки "Сохранять изменения списка в файл" он бесконечно берет одну и ту же строку, а мне не нужно что бы строки удалялись с файла
 

Zlodey-

Client
Регистрация
21.10.2013
Сообщения
64
Благодарностей
14
Баллы
8
А как правильно тогда работать с ним в многопотоке? Пробовал уже и через C# брать с локом, без галочки "Сохранять изменения списка в файл" он бесконечно берет одну и ту же строку, а мне не нужно что бы строки удалялись с файла
переходи на SQLite . Примеры можно найти тут
https://zennolab.com/discussion/threads/z-thecnoman-part4-rest-api-dlja-raboty-zennoposter-s-bd-ili-ckazhi-proschaj-spiskam.108800/
https://zennolab.com/discussion/threads/fastsqlitehelper-legkovesnyj-c-wrapper-dlja-uproschenija-raboty-s-sqlite-v-zennoposter.46425/

И забудешь про краш списков, файлов, повторные взятия и тп при многопотоке.

C# берет первую строку и в переменную proxy., с перемещением вниз списка.
C#:
var ProxyList = project.Lists["прокси"];
lock(SyncObjects.ListSyncer)
{
var proxy = ProxyList[0];
ProxyList.RemoveAt(0);
ProxyList.Add(proxy);
project.Variables["proxy"].Value = proxy.ToString();
}

Закомментируешь или удалишь
ProxyList.Add(proxy);
Будет брать без перемещения вниз списка, просто с удалением.
 
  • Спасибо
Реакции: rol

Dmitriy_Zenno

Administrator
Регистрация
28.10.2025
Сообщения
398
Благодарностей
161
Баллы
43
А как правильно тогда работать с ним в многопотоке? Пробовал уже и через C# брать с локом, без галочки "Сохранять изменения списка в файл" он бесконечно берет одну и ту же строку, а мне не нужно что бы строки удалялись с файла
Если вы берете первую строку и не удаляете ее, конечно же будет браться всегда одна и та же строка. А если вы еще хотите не менять список, при этом подключить многопоток, сложность в логике работы сразу возрастает. У меня с ходу даже нет мыслей, как это правильно организовать.

Вам посоветовали использовать Базу данных - это наверно будет самый оптимальный вариант, но в ней надо разбираться, если вы с ней не знакомы.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 501
Благодарностей
10 047
Баллы
113
мне не нужно что бы строки удалялись с файла
Как вариант, берите строку рандомно, либо берите первую строку с удалением и тут же ее возвращайте в конец списка. Начитаться и заранее испугаться можно запросто. Важно, чтобы вы попробовали все варианты.
 
  • Спасибо
Реакции: Dmitriy_Zenno

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