A辞書はコレクションが変更されないよう 限り、同時に 複数のリーダーをサポートすることができます。 それでも、 コレクションを列挙するのは、本質的にはスレッドセーフな手順ではありません。 まれに の列挙で、書き込みアクセスを伴う と競合する場合、 列挙全体では、 のコレクションをロックする必要があります。 に複数のスレッドでアクセスして の読み取りと書き込みを許可するには、 独自の同期を実装する必要があります。
読み書きは何を意味しますか?私の理解は、読み取りは、キーを検索し、その値への参照を提供する操作であり、書き込みは、キー値のペアを辞書から追加または削除する操作であるということです。しかし、私はこれに関して決定的な何かを見つけることはできません。
大きな問題は、スレッドセーフな辞書を実装する際に、辞書内の既存のキーの値を更新する操作は、読者またはライターと考えるべきでしょうか?私は辞書内の一意のキーにアクセスする複数のスレッドを持ち、それらの値を変更する予定ですが、スレッドは新しいキーを追加/削除しません。
既存の値を変更することが辞書の書き込み操作ではないとすれば、毎回排他ロックを取得する必要はないため、スレッドセーフな辞書の実装はずっと効率的になります私は既存のキーに値を更新しようとします。
.Net 4.0からConcurrentDictionaryを使用することはできません。既存の値を上書き
が
これは本当にコメントです。質問に対する回答ではありません。著者にフィードバックを残すには、「コメントを追加」を使用してください。 – SliverNinja
@ SliverNinjaは、この答えは、 "辞書の既存のキーの値を更新する操作は、読者または作家を考慮する必要がありますか?" – binki