|
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
|
||||||
Потокобезопасный List28.07.2016, 14:35. Показов 23136. Ответов 38
Метки нет (Все метки)
Здравствуйте!
Понадобился мне список, которым я могу управлять (доступ + изменение + добавление) из разных потоков. Написал простейшую обертку, но не уверен, что все корректно сделал. Подскажите пожалуйста, что тут не так?
0
|
||||||
| 28.07.2016, 14:35 | |
|
Ответы с готовыми решениями:
38
Потокобезопасный метод Потокобезопасный массив Потокобезопасный код |
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|
| 21.02.2017, 10:44 | |
|
2
|
|
|
8 / 8 / 0
Регистрация: 13.12.2016
Сообщений: 48
|
||||||
| 21.02.2017, 11:40 | ||||||
|
Работает!!! Спасибо!!!
Добавлено через 51 минуту Вообще огонь!!! Сделал еще под свои потребности что бы в листе хранились только 25 самых последних добавлений.
1
|
||||||
|
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
|
|
| 28.10.2017, 17:53 | |
|
Kertis138, вот пробую я удалить элемент, а тут ошибка, и что делать? Элемент остался, а код выполняется дальше.
0
|
|
|
6 / 6 / 1
Регистрация: 25.02.2016
Сообщений: 342
|
|
| 29.10.2017, 10:49 [ТС] | |
|
0
|
|
|
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
|
|
| 29.10.2017, 11:03 | |
|
Не по теме: как посты от 21.02.2017, 15:40 попадают в верхний список... Добавлено через 8 минут Не по теме: Хотя, думаю сценарий был такой, гуглил я синглтон потокобезопасный, вкладка осталась. Спустя какое-то время, захожу я на форум, открываю новые темы, и отвечаю в старой теме, как в новой :)
0
|
|
|
6 / 6 / 0
Регистрация: 05.11.2011
Сообщений: 26
|
|||||||||||
| 18.10.2018, 12:54 | |||||||||||
|
Типом возвращаемого значения надо сделать T:
Вот окончательный класс, который умеет всё, что и обычный List, но при этом потокобезопасен. Протестил, глюков не было. Спасибо за наводку!
0
|
|||||||||||
|
6 / 6 / 0
Регистрация: 05.11.2011
Сообщений: 26
|
||||||
| 19.10.2018, 05:30 | ||||||
|
Сократил код на 50 строк, сделал 3 статических метода для использования в т.ч. снаружи. Вроде больше ничего не нужно здесь. Неплохой лист получился
![]()
0
|
||||||
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,738
|
|
| 19.10.2018, 06:59 | |
|
Svarogich, при обращении к каждому методу будет создаваться объект лямбды с замыканием для выполнения в методе-обёртки? Классное решение, производительное.
0
|
|
|
6 / 6 / 0
Регистрация: 05.11.2011
Сообщений: 26
|
|
| 22.10.2018, 13:59 | |
|
Usaga, Прошу пояснить. Как я понял, косяк в том, что ListLock передается без ref и, т.о., создается новый объект, к первому не привязанный. Ок, передадим через ref, согласен. А с Action что не так? Он содержит ссылки на InnerList и, имхо, ничего там не замыкается. Создается он мгновенно. Или я и тут неправ?
1
|
|
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,738
|
|
| 22.10.2018, 14:07 | |
|
Svarogich, речь о том, что лямбда - класс, объект которого будет создаваться каждый раз перед передачей в
RunReadLockedFunction. Все внешние ссылки, что такой класс использует, будут "захвачены" с помощью создания другого класса и передачи его в лямбду. Т.е. каждый вызов метод "синхронной" коллекции будет приводить к созданию мусора. Подобные приёмы не критичны в обычных ситуациях, но у вас коллекция, которая потенциально может использоваться в нагруженных сценариях. Получается, что такая коллекция будет сильно мусорить совершенно без причины. Плохое решение.
1
|
|
|
6 / 6 / 0
Регистрация: 05.11.2011
Сообщений: 26
|
|
| 22.10.2018, 14:24 | |
|
Usaga, Ясно, спасибо. А есть ли хорошее и таки красивое решение, не предполагающее try{}catch в каждом методе?
1
|
|
|
6 / 6 / 0
Регистрация: 05.11.2011
Сообщений: 26
|
||||||
| 23.10.2018, 08:25 | ||||||
|
Перестроил лист, вынеся лямбды в два отдельных словарика, чтоб не плодились бесконтрольно. От полутора десятков лишних экшенов сервер не ляжет, полагаю. Конструкция чуток усложнилась, но лист остался расширяемым. Жду критики.
0
|
||||||
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,738
|
|
| 23.10.2018, 16:48 | |
|
Svarogich, это ещё хуже)
Обратите внимание, что работая с некоторой закрытой (от изменения) реализацией коллекции, сделать работу с ней потокобезопасной каким-то эффективным или элегантным образом не получится. Если вы работаете с List<T> в качестве основы своей потокобезопасной коллекции, то самым простым и эффективным решением будет использование ReaderWriterLockSlim и try\finally везде. Всё остальное - уже мудрёж.Если нужно ещё более эффективное или элегантное решение, то вам придётся использовать свою реализацию List<T>.
1
|
|
|
0 / 0 / 1
Регистрация: 06.09.2017
Сообщений: 29
|
|||||||||||
| 25.02.2020, 11:59 | |||||||||||
|
Извиняюсь что поднимаю старую тему. Но вопрос для меня актуальный.
Решил воспользоваться этой коллекцией так как в своем коде использовал Монитор
Видимо придется использовать либо потокозащищенную коллекцию либо попробовать этот лист на основе ReaderWriterLockSlim так как производительность важна. Правда я его наследовал не от IEnumerable<T> а от BindingList<T> и не могу корректно его скопировать так как нужно допилить конструктор с передачей другого листа _FiltredLogRows = new SortableBindingList<LogRow>(_LogRows); По итогу тут создается просто пустой лист. Я так понимаю нужно допилить конструктор самого листа тут
this.AddRange(list); не работает.
0
|
|||||||||||
|
8 / 8 / 0
Регистрация: 13.12.2016
Сообщений: 48
|
|||||||
| 25.02.2020, 12:03 | |||||||
2
|
|||||||
|
0 / 0 / 1
Регистрация: 06.09.2017
Сообщений: 29
|
|||||||
| 25.02.2020, 12:13 | |||||||
|
у меня биндинг еще с допиленной сортировкой
0
|
|||||||
|
0 / 0 / 1
Регистрация: 06.09.2017
Сообщений: 29
|
||||||
| 26.02.2020, 21:53 | ||||||
|
запилил в биндинглист все схавал за исключение
вмещающий тип не реализует интерфейс "IEnumerable". как избавиться? Добавлено через 34 минуты Почитал всякие форумы и как я понимаю не получится создать потокозащищенную коллекцию на основе BindingList<T> так как начинаются проблемы при связывании его в качестве DataSource с элементами управления на форме. Все выше предложенные классы создают узкий потокозащищенный функционал с поиском по индексу удалению и добавлению элемента. Что же касается DataSource то этого функционала нет и не прикрутишь((((
0
|
||||||
|
0 / 0 / 0
Регистрация: 16.07.2020
Сообщений: 1
|
||
| 16.07.2020, 14:15 | ||
|
0
|
||
|
8 / 8 / 0
Регистрация: 13.12.2016
Сообщений: 48
|
|
| 16.07.2020, 14:19 | |
|
1
|
|
| 16.07.2020, 14:19 | |
|
Потокобезопасный вызов метода
Linq преобразование List<List<double>> в List<Array> Необходимо создать dll в которой буду обрабатывать list<list<string>> List<string> или все же List<StringBuilder>, что лучше использовать? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного.
1. Почему показания термометра заряжены целью?
Цель заложена в самом. . .
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
По ссылке 403. Не очень информативно такую ссылку постить.
Запись от Usaga размещена Сегодня в 06:46 . . .
|
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|