2016-11-14 5 views
1

init-time時に、辞書にいくつかの値を追加しました。c#辞書でTryGetValueだけを使用するとスレッドセーフです。

その後、私はTryGetValueだけが必要です。

この場合、TryGetValueをロックする必要がありますか?

+0

私はそれがスレッドセーフであるべきだと思いますが、同時のシナリオでは同時データ構造を使用してください。 – tym32167

+0

常にスレッドセーフで読み込み、問題を作成する書き込みです –

答えて

2

あなたはそれだけ/ TryGetValueを使用して読めばはい、それは、スレッドセーフです:

Documentationを:

Dictionary<TKey, TValue>は限りコレクションがが変更されないよう、同時に を複数のリーダーをサポートすることができます。それでも、コレクションを通じて を列挙することは、本質的にスレッドセーフな手順ではありません。 列挙型が書き込みアクセスと競合するまれなケースでは、列挙全体で コレクションをロックする必要があります。 コレクションに読み取りと書き込みのために複数のスレッドがアクセスできるようにするには、 独自の同期を実装する必要があります。

0

読み込み辞書は、人口がスレッドセーフです。

ConcurrentDictionaryクラスを使用すると、読み書きが必要なユースケースに対するスレッドの安全性が保証されます。 MSDNから

は、同時に複数のスレッドによってアクセス 可能なキー/値のペアのスレッドセーフなコレクションを表します。

名前空間:
System.Collections.Concurrentアセンブリ:(がmscorlib.dllで)mscorlib

Link to MSDN here

関連する問題