2

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

据我了解 ConcurrentDictionary 在单元格的级别上实现锁定,对我来说,遍历整个集合并通过某些条件删除不相关的数据很重要。我害怕通过我的迭代,其他线程将添加应该在我的迭代器在集合中的那个点之后过滤的数据。

那么我如何使用 ConcurrentDictionary 来实现这一点,或者应该在该集合的每次触摸上使用具有锁定机制的普通字典。

谢谢。

4

2 回答 2

1

ConcurrentDictionaryIMO 的主要优势在于它对读取线程是无锁的,这通常是您使用它的原因;如果您不需要这种优势,那么您可以使用带锁的字典。

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

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

于 2014-10-23T11:04:28.387 回答
0

绝对不能保证,在ConcurrentDictionary不锁定字典的情况下迭代它时不会添加任何条目。但是如果做加锁,那么使用就没有意义了ConcurrentDictionaryDictionary改用。

顺便说一句,为什么在没有“坏”条目的情况下结束迭代对你来说很重要?在释放锁后的下一刻,它可以填充其中任何一个。也许最好不要让不需要的条目出现在字典中?

于 2014-10-23T10:57:31.253 回答