【发布时间】:2015-03-10 09:52:38
【问题描述】:
查看.NET 源代码中HashSet<T> 类中Contains 的代码,我找不到任何Contains 不是线程安全的原因?
我正在提前加载带有值的HashSet<T>,然后在多线程.AsParallel() 循环中检查Contains。
这有什么不安全的原因吗?
当我实际上不需要存储值时,我不愿意使用ConcurrentDictionary。
【问题讨论】:
-
你是写一次,然后只在多个线程中读取吗?
-
Contains 是线程安全的,只要您不从集合中添加/删除任何内容(当您使用 contains 时)
-
为什么不阅读手册? msdn.microsoft.com/en-us/library/bb359438.aspx: 这种类型的任何公共静态(在 Visual Basic 中为共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。
-
MSDN 并没有说它是“非线程安全的”。他们只是不保证。原因可能是它没有经过测试,或者它可能会随着一些未来的版本而改变
-
@nafas 还有一个问题...你一定要确定最后一次写入后有MemoryBarrier,否则读取可能会读取到一些不完整的数据
标签: c# multithreading hashset