2016-08-26 5 views
0

などの名前空間のコレクションを使用している場合(ConcurrentDictionary<K, V>など)、このオブジェクトのアクセスと変更を別のスレッドに行って、アクセスと変更でインターリーブする必要があります。System.Collections.Concurrentオブジェクトに対して複数の操作をアトミックに実行しますか?

どうすればよいですか?可能であれば、競合するスレッドがこれらの操作が行われているときにConcurrentDictionaryにアクセスしようとすると、非常に遅くなりますか?

ConcurrentDictionary<KType, VType> conDict = ...; 

// How do I ensure that these operation are performed atomically? 
VType myVInst; 
conDict.TryRemove(2, out myVInst); 
conDict.AddOrUpdate(1, new VType(), (x, y) => y); 

答えて

2

これらのデータ構造では、概念的にアトミックなブロックで複数の操作を実行することはできません。

アトミックである単一のメソッド呼び出しのみに依存する作業コードを書くことができない場合は、必要な操作を具体的にサポートする独自の並行データ構造を記述するか、非並行すべてのアクセスを同期させることができます。

関連する問題