如何确保集合的ConcurrentDictionary线程安全?

时间:2012-02-13 02:02:12

标签: c# data-structures concurrency

所以我在这里实现了一些缓存层。但是,我仍然坚持

ConcurrentDictionary<SomeKey,HashSet<SomeKey2>>

我需要确保HashSet上的操作也是线程安全的(ergo Update是线程安全的)。是否有可能以任何简单的方式或我必须在UpdateFactory委托中同步?如果答案是肯定的(我认为是这样的话)你之前遇到过这个问题并解决了吗?

我想避免使用ConcurrentDictionaries的ConcurrentDictionary,因为它们分配了很多同步对象,我可能在这个东西中有大约一百万个条目,所以我希望GC上的压力更小。 选择HashSet是因为它保证了插入,删除和访问的摊销不变成本。

上述结构将用作较大数据集的索引,其中列作为键(SomeKey和Somekey2),就像数据库索引一样。

1 个答案:

答案 0 :(得分:1)

好的,最后我决定使用Immutable set和lock striping,因为它实现和理解起来相当简单。如果我需要更多的写入性能(不复制插入时的整个哈希集),我将使用条带化实现读/写锁 - 无论如何应该没问题。 谢谢你的建议。