首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包含常规采集.net的并发采集

包含常规采集.net的并发采集
EN

Stack Overflow用户
提问于 2015-10-07 22:40:49
回答 3查看 71关注 0票数 2

假设我有ConcurrentDictionary<int, HashSet<int>> sampleCollection;。在sampleCollection[1] (一个HashSet<int>)上执行操作是线程安全的吗?

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

EN

回答 3

Stack Overflow用户

发布于 2015-10-07 22:49:32

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

即使HashSet在这个星座中是以某种方式协作和安全的,你也永远不能假设它是一个任意类型。

数据结构和算法必须经过特殊设计才能保证线程安全。任何未记录为安全的内容都被认为是不安全的。

票数 3
EN

Stack Overflow用户

发布于 2015-10-07 22:49:59

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

票数 0
EN

Stack Overflow用户

发布于 2015-10-07 23:22:25

从这里的其他答案中,您已经了解到ConcurrentDictionary<int, HashSet<int>> sampleCollection;中的HashSet<int>不是线程安全的,因为(正如@usr所说的那样),它无法发现它是在线程安全的数据结构中聚合的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32995237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档