迭代ConcurrentDictionary并修改集合

时间:2014-10-23 10:41:21

标签: c# .net concurrentdictionary

迭代ConcurrentDictionary集合并删除一些条目的正确方法是什么。

据我所知,ConcurrentDictionary在一个单元格的层次上实现锁定,对我而言,重要的是遍历整个集合并通过某些条件删除不相关的数据。我担心通过我的迭代,其他线程将添加应该在我的迭代器在集合中的那个点之后被过滤的数据。

所以我如何使用ConcurrentDictionary实现这一点,或者应该在每次触摸该集合时使用带锁定机制的普通Dictionary。

感谢。

2 个答案:

答案 0 :(得分:1)

ConcurrentDictionary IMO的主要优势在于lock free for the reading threads,这通常是您使用它的原因;如果你不需要这个优势,那么你可以使用带锁的字典。

您始终可以确保将过滤条件传递给过滤器迭代开始后发生的任何添加。

否则,如果非阻塞读取比偶尔的不一致条目更重要,您可以重复过滤,直到找不到更多无效项目。

答案 1 :(得分:0)

明确地说,您无法保证在没有锁定字典的情况下迭代它时,ConcurrentDictionary不会添加任何条目。但是如果要锁定,那么使用ConcurrentDictionary就没有了,请改用Dictionary

顺便说一下,为什么结束迭代没有“坏”的重要性。条目还剩下?释放锁后,可以在下一刻填充任何一个。也许最好不要让不需要的条目出现在词典中?