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

Mutant

Client
Регистрация
19.09.2014
Сообщения
194
Благодарностей
36
Баллы
28
Есть список и есть переменная. Задача - очистить список от начала до значения указанного в переменной. В однопотоке просто брал первую строчку из списка с удалением, сравнивал с переменной и если не совпадало брал следующую строку из списка. Пока не доходил до нужного мне значения.
Дальше работал с оставшимся списком.
Подскажите как правильно реализовать такое при многопотоке?
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 042
Благодарностей
6 476
Баллы
113
попробуйте список в файл положить и брать от туда с удалением, при много потоке работает норм
берите также количество строк из списка и сравнивайте с переменной
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93
1. Список должен быть привязан к файлу, обязательно, иначе у каждого потока будет своя копия списка
2. При работе со списком надо использовать
C#:
lock(SyncObjects.ListSyncer){
// тут код работы со списком  
}
Для того, чтобы другие потоки ждали , пока поток работающий со списком произведет в нем изменения

Или глобальные переменные, но это изврат еще тот будет.
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113
1. Список должен быть привязан к файлу, обязательно, иначе у каждого потока будет своя копия списка
2. При работе со списком надо использовать
C#:
lock(SyncObjects.ListSyncer){
// тут код работы со списком 
}
Для того, чтобы другие потоки ждали , пока поток работающий со списком произведет в нем изменения

Или глобальные переменные, но это изврат еще тот будет.
При работе стандартными экшнами лочить список нет нужды.
 

Adigen

Client
Регистрация
28.07.2014
Сообщения
825
Благодарностей
653
Баллы
93

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
а я на глобальных. не доверяю перезаписи
 

Mutant

Client
Регистрация
19.09.2014
Сообщения
194
Благодарностей
36
Баллы
28
Что то я совсем запутался...
Давайте я озвучу как я все понял, а вы скажите где я не прав.
Предположим у нас 5 потоков. Первый поток начал работать со списком, залочив его для остальных (тут все понятно). Дальше отработав он снимает лок с файла и из оставшихся четырех - кто первый встал, того и тапки. Остальные 3 опять ждут. Но первый поток пришел опять что бы работать с этим же списком. Он обязательно станет в очередь за теми тремя которые еще не успели отработать в первый раз? Или он будет бороться кто быстрей?
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 440
Благодарностей
503
Баллы
113
Всё происходит в порядке живой очереди :-)
В целом не стоит об этом переживать - реализация работы в многопотоке со списками в зенно очень корректна, во всяком случае на собственном опыте проверял ~100 потоков друг другу не мешают и читают / пишут в один список всё как надо.
 

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