2016-10-11 20 views
1

私は辞書がaddmodifyの操作しかサポートしておらず、同時に操作することができますが、は常に異なるキーです。キーはintで、値は参照型です。また、modifyは値のいくつかのプロパティを変更することを意味します。C#辞書並行追加または異なるキーのみの変更、ConcurrentDictionaryが必要ですか?

私の質問は以下のとおりです。

  1. は、私は、このシナリオでConcurrentDictionaryを使用する必要がありますか?必要に応じて、どのように役立ちますか?
  2. ConcurrentDictionaryは、同じキーで同時実行が可能な場合、スレッドの安全性を保証しますか?私の理解はノー、正しい?

ありがとう!

+0

1.はい、それを使用する必要があります。 ["これらの操作はすべて、アトミックであり、ConcurrentDictionary クラスの他のすべての操作に関してスレッドセーフです。唯一の例外は、デリゲート、つまりAddOrUpdateとGetOrAddを受け入れるメソッドです。 (https://msdn.microsoft.com/en-us/library/dd287191(v=vs.110).aspx#Anchor_7)「私には声をかけてください」タグが必要です。 –

+1

これらの操作が有効かどうかに関して、それぞれのタイプのドキュメントを見たときに、あなたは何を見つけましたか?あなたが見つけた情報は、これらの質問にどのように答えなかったのですか? – Servy

+0

@EdPlunkettありがとうございます。ドキュメントやその他のSOの回答を読んで、私は最初の質問のためにそれを得ると思います。はい、コンカレントバージョンを使用する必要があります。同時追加すると、dictがサイズ変更される可能性があり、それによって問題が発生するためです。しかし、2番目の質問については、私はまだそれほど明確ではありません。私は、同時バージョンを使用することすら考えています。同時に値のプロパティを変更すると、値をロックする必要があります。本当?ありがとう! – Student222

答えて

0

このシナリオでは、ConcurrentDictionaryを使用する必要がありますか?必要ならば、どのように が役立つのですか?

複数のスレッドが同時にエントリを追加または削除する場合は、[はい、標準辞書が正しく動作しません。 (ただし、複数のスレッドが他のスレッドを変更していない場合は、複数のスレッドが同時に読むことができます)。

同時変更が同じキーで発生する場合は、 ConcurrentDictionaryはスレッドの安全性を保証しますか?私の理解は いいえ、それは正しいですか?

「同時並行ディクショナリでは、複数のスレッドが同時にディクショナリ内の値にアクセスできなくなりますか?」と問いかける場合は、「いいえ」は表示されません。

複数のスレッドが同時に同じ値にアクセスしないようにするには、ロックなどの並行処理コントロールを使用する必要があります。

0

これを見つける最も良い方法は、MSDNのドキュメントを確認することです。

ConcurrentDictionaryについてページがhttp://msdn.microsoft.com/en-us/library/dd287191.aspxスレッドの安全性のセクションで

は、記載されている「ConcurrentDictionary<TKey, TValue>のすべてのパブリックおよび保護されたメンバーは、スレッドセーフであり、複数のスレッドから同時に使用することができます。」

関連する問題