0

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

例如,假设我有一个字典,我首先用数据填充它,然后我生成了几个线程(或任务),它们只从它读取,或者只检查一个键是否存在,但从不写入或更改它。

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

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

4

1 回答 1

2

例如,假设我有一个字典,我首先用数据填充它,然后我生成了几个线程(或任务),它们只从它读取,或者只检查一个键是否存在,但从不写入或更改它。

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

文档中:

ADictionary<TKey, TValue>可以同时支持多个读取器,只要不修改集合即可。

于 2013-03-12T08:19:54.693 回答