Cam*_*ron 4 c# multithreading thread-safety
我有这样的代码,它同时从多个线程执行(通过共享a和b类型的对象Dictionary<int, double>):
foreach (var key in a.Keys.Union(b.Keys)) {
dist += Math.Pow(b[key] - a[key], 2);
}
Run Code Online (Sandbox Code Playgroud)
字典在线程的生命周期内不会改变.这样安全吗?到目前为止,似乎没问题,但我想确定一下.
只要不修改集合,Dictionary(Of TKey, TValue) 就可以同时支持多个读取器。即便如此,通过集合进行枚举本质上并不是线程安全的过程。在枚举与写访问发生冲突的极少数情况下,必须在整个枚举期间锁定集合。要允许多个线程访问集合以进行读写,您必须实现自己的同步。
有关线程安全的替代方案,请参阅 ConcurrentDictionary(Of TKey, TValue)。
此类型的公共静态(在 Visual Basic 中为共享)成员是线程安全的。