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

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

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

14 ответов

16 просмотров

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта