我使用 aConcurrentDictioanry<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
语句中以确保一切都是线程安全的?