словарь одновременной очереди .net 4.0 - PullRequest
3 голосов
/ 31 мая 2010

Я хотел бы использовать новые параллельные коллекции в .NET 4.0 для решения следующей проблемы.

Базовая структура данных, которую я хочу иметь, это очередь потребителя-производителя, будет один потребитель и несколько производителей.

Есть элементы типа A, B, C, D, E, которые будут добавлены в эту очередь. Элементы типа A, B, C добавляются в очередь обычным образом и обрабатываются по порядку.

Однако элементы типа D или E могут существовать только в очереди ноль или один раз. Если один из них должен быть добавлен и уже существует другой того же типа, который еще не был обработан, то это должно обновить этот другой на месте в очереди. Положение очереди не изменится (то есть не перейдет в конец очереди) после обновления.

Какие классы .NET 4.0 лучше всего подойдут для этого?

1 Ответ

3 голосов
/ 31 мая 2010

Я думаю, что в .net 4 нет такой (приоритетной) очереди, которая поддерживала бы атомарную операцию AddOrUpdate. Существует только ConcurrentDictionary, который поддерживает это, но он не подходит, если вам нужно сохранить порядок.

Таким образом, вы можете использовать некоторую комбинацию из двух.

Тем не менее, имейте в виду, что вы потеряете безопасность параллельных структур, как только вы выполняете комбинированные операции над ними; Вы должны реализовать механизм блокировки самостоятельно (посмотрите пример такой ситуации: .Net4 Gem: ConcurrentDictionary - Tips & Tricks ).

Второй вариант - Google для некоторых сторонних реализаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...