包含常规集合.net的并发集合

时间:2015-10-07 14:40:49

标签: c# multithreading thread-safety concurrentdictionary concurrent-collections

假设我有ConcurrentDictionary<int, HashSet<int>> sampleCollection;。在sampleCollection[1]HashSet<int>)上执行操作是否可以线程安全?

通常,如果我们在线程安全的集合中有一个非线程安全的集合,那么通过线程安全的外部集合来操作非线程安全的集合是否是线程安全的吗?

3 个答案:

答案 0 :(得分:3)

HashSet不知道它是在安全数据结构中聚合的。它没有办法找出答案。它不能调整它的行为。

即使HashSet特别容易以某种方式合作并且在这个星座中是安全的,你也永远不能认为是任意类型。

数据结构和算法必须专门设计为线程安全的。任何未记录为安全的东西都被认为是不安全的。

答案 1 :(得分:0)

如果在第一次输入ConcurrentDictionary 之后可以修改HashSet ,那么它不是线程安全的。正确的答案是

答案 2 :(得分:0)

从其他答案中你已经明白HashSet<int>中的ConcurrentDictionary<int, HashSet<int>> sampleCollection;不是线程安全的,因为(正如@usr所说),它无法找出它是聚合的在线程安全的数据结构中。

您可以使用ConcurrentDictionary<int, ConcurrentBag<int>> sampleCollection;来实现您的目的。