1

マルチスレッドでアクセスされるメソッドで ConcurentDictionary dic を使用する場合、そのような構造で次のことを確認できます。

foreach (Subscription sub in subscriptions[ex].Values)
                    {
                      ....
                    }

subscriptionsいくつかの方法で実行してもConcurrentDictionary<string, ConcurrentDictionary<long, Subscription>>変わらないので、スレッドセーブになりますか? または、次のようなロックを使用する必要があります。

lock(padLock)
{   
foreach (Subscription sub in subscriptions[ex].Values)
                        {
                          ....
                        }
}

正しく動作させるには?

4

1 に答える 1

1

ConcurrentDictionary のすべての public および protected メンバーはスレッド セーフであり、複数のスレッドから同時に使用できます。

そうです、Values反復中に他のスレッドがコレクションを変更したとしても、余分なロックがなくても安全です。

変更とは、新しいペアを追加するか、辞書内の既存の値を変更することを意味します。

于 2012-06-25T07:55:56.873 に答える