質問

ConcurrentDictionary のロックフリー操作が好きです。2つのオブジェクト:

 ConcurrentDictionary<datetime,myObj> myIndexByDate
 ConcurrentDictionary<myObjSummary, ConcurrentDictionary<int, myObj> myObjectSummary Index
.

これら2つのオブジェクトは同期に留まる必要があります。これを行う唯一の方法はロックを使用することです、したがって、並行辞書のすべての利点を避けることができますか?

役に立ちましたか?

解決

私は2辞書を持つカスタムクラスを作成し、辞書を変更することができないメソッドでのみロックを使用します(追加、削除)。

このメソッドが通常の辞書を使用している必要があるものよりもはるかに少ないコードを必要とするため、同時辞書の利点を失うことはありません。

他のヒント

ConcurrentDictionaryは、特定のインスタンス上の操作上の「スレッドセーフ」のみです。例えばConcurrentDictionary.tryAdd()呼び出しが呼び出されている間、他のスレッドはコレクションを変更することはできません...

これは、1つの辞書から値を取得し、それを2番目に追加している間に値がまだ存在する別の辞書に追加されていることを意味しません。

あなたはおそらくあなたが一つの値を1つの辞書から他の辞書に移動している間に、元の辞書の値を削除することはできません(または少なくとも値ですが、それがの値で)個々の値を削除することができます。ConncurrentDictionaryを保証するのはもう少し難しいです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top