170 похожих чатов

У меня есть список интов в который пишутся значения в

несколько потоков, мне нужно застраховаться от дублирования записей.
Пишут что ConcurrentBag не покатит для этих целей, т.к. пока я проверяю есть ли элемент в коллекции, другой может, в этот момент, записать значение.
Как поступить в данном случае? Есть смысл юзать, например, ConcurrentDictionary — только ключи, а на значения забить, например <int, bool>?

14 ответов

12 просмотров

Может поможет blocking Collection?

Nikolay-Shamshurin Автор вопроса
Хмельное Пиво 🍺
Может поможет blocking Collection?

Да, тоже смотрел, не знаю как элегантно выйти из ситуации.

Hashset с lock?

Либо

Nikolay-Shamshurin Автор вопроса
Phantom
Hashset с lock?

Хм, в эту сторону не смотрел. Смотрел в строну самопального листа с локами

Можно сделать double check lock. Проверить есть ли дубликат, если нету, то повесить лок, проверить ещё раз под локом. Если и во второй раз нет - можно спокойно добавлять (внутри того же лока). Получается простенький read-write lock Но только проверки будут, вроде как, линейные, ибо это не hashset. Если это критично, то hashset с иоками или таки concurrent dictionary.

Nikolay-Shamshurin Автор вопроса
SomebodyOdd
Можно сделать double check lock. Проверить есть ли...

Спасибо! Сложный выбор, есть что почитать/посмотреть перед сном)

Nikolay Shamshurin
Спасибо! Сложный выбор, есть что почитать/посмотре...

Ну, можем чатиком помочь =) Насколько часто чтения из этой коллекции? Порядок важен? Как часто запись? Как часто попытки записи дубликатов?

Nikolay-Shamshurin Автор вопроса
SomebodyOdd
Ну, можем чатиком помочь =) Насколько часто чтения...

Это набор айдишников для кешей изображений, для респонса. Порядок, соответственно не важен совсем. По сути операции 3: add, contains, clear

Nikolay Shamshurin
Это набор айдишников для кешей изображений, для ре...

Веб приложение? Может быть memory cache тогда? Если нет, то hashset с ReaderWriterLockSlim выглядит более подходящим вариантом. Если там асинхронный код, то тогда надо взять AsyncReaderWriterLock из этого пакета, ибо системный гвоздями прибит к id потоков. https://github.com/microsoft/vs-threading

Nikolay-Shamshurin Автор вопроса
SomebodyOdd
Веб приложение? Может быть memory cache тогда? Есл...

Реализация своя. Веб приложение, да.

Nikolay-Shamshurin Автор вопроса
Nikolay-Shamshurin Автор вопроса

Если кому интересно, вот что ещё нашлось по вопросу: https://stackoverflow.com/questions/18922985/concurrent-hashsett-in-net-framework

Похожие вопросы

Обсуждают сегодня

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта