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

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

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

14 ответов

5 просмотров

Может поможет 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

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

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

А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
Карта сайта