我应该如何保持2个并发字典同步?

时间:2012-05-19 14:56:07

标签: c# multithreading locking task-parallel-library concurrentdictionary

我喜欢ConcurrentDictionary的无锁操作,并在两个对象中使用它:

 ConcurrentDictionary<datetime,myObj> myIndexByDate
 ConcurrentDictionary<myObjSummary, ConcurrentDictionary<int, myObj> myObjectSummary Index

这两个对象需要保持同步。唯一的方法是使用Lock,从而避免使用Concurrent字典的所有好处吗?

2 个答案:

答案 0 :(得分:3)

我将创建一个包含2个字典的自定义类,并仅对易于更改字典的方法使用锁定(添加,删除)。

您不会失去并发字典的好处,因为此方法所需的代码少于使用普通字典所需的代码。

答案 1 :(得分:1)

ConcurrentDictionary对特定实例上的操作只是“线程安全的”。例如在调用ConcurrentDictionary.TryAdd()调用时,没有其他线程可以修改集合...

这并不意味着当您从一个字典中获取值并将其添加到另一个字典时,当您将其添加到第二个字典时,该值仍然存在于原始字典中。

你可能有一个不变的细节,当你将一个值从一个字典移动到另一个字典时,原始字典中的值不能被删除(或者至少那个值,但那是使用ConncurrentDictionary更难保证。