2011-10-25 14 views
0

私は、異なるスレッドで実行されている異なるクライアントからの購読要求と購読解除要求を扱うシングルトンクラスを持っています。シングルトンには、サブスクライバのコレクションが含まれています。追加または削除する前に、クラスは要素がまだ追加または削除されていないことを検証する必要があります。このシナリオでは、どのスレッドセーフなコレクションが適切ですか?

通常、これはListまたは各操作の前にContainsを呼び出すHashSetを使用して実装しますが、System.Collections.Concurrent名前空間で新しいクラスの1つを使用する場合は、 ConcurrentDictionaryにダミー値を設定します。

これは私の最善の選択ですか、それとも私が見逃していることはありますか?ところで、パフォーマンスは実際に考慮する要因ではありません。

答えて

0

は、私はあなたがブロッキングキューで裏打ちConcurrentDictionaryを使用いけないなぜあなたは... ConcurrentDictionary

+0

"と異なり、バッグは重複をサポートしています。対「追加または削除する前に、クラスは要素がまだ追加または削除されていないことを検証する必要があります。 – CodesInChaos

0

を堅持すべきだと思います。 BlockingQueueはプロデューサ/コンシューマスキームに適合しているようですが、ConcurrentDictionaryはルックアップに適しています。

+0

私のシナリオがプロデューサー/消費者計画に合っているかどうかはわかりません。サブスクライブ解除要求はサブスクライブ要求と同じ順序に従う必要はないので、この場合キューを使用することのメリットを確認できません。私は、単に辞書を使うのと比較して、追加の利点は見られない。 – Mike

関連する問題