a を使用して、ConcurrentDictioanry<string, HashSet<string>>
多くのスレッドにまたがるデータにアクセスします。
この記事(下にスクロール) で、メソッドAddOrUpdate
がロックで実行されないため、スレッド セーフが危険にさらされる可能性があることを読みました。
私のコードは次のとおりです。
//keys and bar are not the concern here
ConcurrentDictioanry<string, HashSet<string>> foo = new ...;
foreach(var key in keys) {
foo.AddOrUpdate(key, new HashSet<string> { bar }, (key, val) => {
val.Add(bar);
return val;
});
}
すべてがスレッドセーフであることを確認するために、AddOrUpdate
呼び出しをステートメントで囲む必要がありますか?lock