我什么时候可以用标准集合替换并发集合?

时间:2013-03-12 08:18:19

标签: .net .net-4.0 concurrency

当我有多个线程需要与集合同时工作时,我通常使用System.Collections.Concurrent下的集合。
然而,与非并发对应物相比,这些集合更昂贵。我想知道在某些情况下是否可以通过非并发集合安全地替换它们。

例如,假设我有一个字典,我首先填充数据,稍后我会生成几个只有读取的线程(或任务),或者只检查密钥是否存在,但绝不写或改变它。

在这种情况下,使用Dictionary<TKey, TValue>是否安全,或者我仍然必须使用ConcurrentDictionary<TKey, TValue>

在一般情况下,只要不修改集合,我可以假设所有标准集合都支持多个读者吗?

1 个答案:

答案 0 :(得分:2)

  

例如,假设我有一个字典,我首先填充数据,稍后我会生成几个只从中读取的线程(或任务),或者只检查一个密钥是否存在,但从不写或更改它

是的,只要有没有编写者,就可以从多个线程的Dictionary<,>读取是安全的。你应该确保在最后一次写入和第一次读取之间存在内存障碍 - 但如果你在填充字典后产生了线程,那应该不是问题。

来自documentation

  

只要未修改集合,Dictionary<TKey, TValue>可以同时支持多个阅读器。