2013-12-07 34 views
3

当使用System.Collections.Concurrent时,我应该了解哪些包含的项目?并发集合上通用参数的线程安全问题

例如: ConcurrentDictionary<int,HashSet<string>> VS ConcurrentDictionary<int,ConcurrentBag<string>>

HashSet中可能会因为它的行为是desireable ...但它不包含在安全的并发集合空间。那么我是否需要担心多个线程可能一次写入一个包含的哈希集合?或者这些访问是否会以线程安全的方式在并发字典的上下文中进行管理? MSDN指出HashSet的实例成员不保证是线程安全的。

请解释其含义并提供指导。谢谢。

回答

6

并发集合不会访问所包含的项目。 他们怎么可能?

例如:

var myValue = myDictionary[myKey]; 
... I can now do what I want with myValue without the dictionary being aware of it. 

在你的情况,你必须实现自己的用于访问HashSet的同步。

+0

哇,这是完全清楚的。谢谢。 – cocogorilla