保持线程不安全集合的并发字典是否需要在C#中锁定

时间:2014-08-07 12:14:06

标签: c# .net multithreading collections concurrency

我将ConcurrentDictionary声明如下

enter image description here

我担心的是,ConcurrentDictionary是线程安全的,但List不是线程安全的。当我尝试使用密钥访问此列表时,我是否必须在使用之前放置锁?或者ConcurrentDictionary会照顾它吗?

任何细节,都将深表感谢。

1 个答案:

答案 0 :(得分:3)

ConcurrentDictionary只会处理对词典的并发访问。任何导致列表内部副作用的代码,例如迭代它或添加值都必须带有额外的锁定机制,因为ConcurrentDictionary不对此负责。

所以是的,您必须在列表周围添加锁定机制,或者只使用ConcurrentBag<T>

public static ConcurrentDictionary<int, ConcurrentBag<object>>