【发布时间】:2018-06-29 00:38:15
【问题描述】:
我有一个场景,所有线程只会将唯一键插入字典。换句话说,没有两个线程会插入相同的键。我也没有任何更新或读取操作。它只是插入。在这种情况下我需要ConcurrentDictionary 吗?
【问题讨论】:
-
如果没有更新或读取操作,拥有它有什么意义???而且,如果有更新或读取操作,你已经知道你需要一个 ConcurrentDictionary。
-
A non-threadsafe collection does not come with any such guarantees. For instance, if you add something to a binary tree on one thread, while another thread is busy rebalancing the tree, there's no guarantee the item will be added, or even that the tree is still valid afterwards, it might be corrupt beyond hope.- 来自链接问题的答案。 -
所提供的链接中提到的场景均不适用于我。我只是插入密钥,而不是读取、更新或删除。我需要一本字典,因为每个键都与某个值相关联。而且我想添加到字典不需要任何类型的数据结构平衡?对不起,如果我错了。
-
@vmzi 它在这里给你答案,“非线程安全的集合没有任何这样的保证。例如,如果你在一个线程上向二叉树添加一些东西,而另一个线程正在忙于重新平衡树,不能保证该项目会被添加,甚至不能保证树之后仍然有效,它可能已经损坏到无法预料的地步。”或者您当然可以只查看该类型的文档,因为它非常明确地说明了它的线程安全保证。
-
@dev27 如果您在某些时候没有阅读字典,那么只需丢弃这些值,而不是尝试存储它们。问题解决了!
标签: c# multithreading dictionary concurrentdictionary