我喜欢ConcurrentDictionary的无锁操作,并在两个对象中使用它:
ConcurrentDictionary<datetime,myObj> myIndexByDate
ConcurrentDictionary<myObjSummary, ConcurrentDictionary<int, myObj> myObjectSummary Index
这两个对象需要保持同步。唯一的方法是使用Lock,从而避免使用Concurrent字典的所有好处吗?
答案 0 :(得分:3)
我将创建一个包含2个字典的自定义类,并仅对易于更改字典的方法使用锁定(添加,删除)。
您不会失去并发字典的好处,因为此方法所需的代码少于使用普通字典所需的代码。
答案 1 :(得分:1)
ConcurrentDictionary对特定实例上的操作只是“线程安全的”。例如在调用ConcurrentDictionary.TryAdd()调用时,没有其他线程可以修改集合...
这并不意味着当您从一个字典中获取值并将其添加到另一个字典时,当您将其添加到第二个字典时,该值仍然存在于原始字典中。
你可能有一个不变的细节,当你将一个值从一个字典移动到另一个字典时,原始字典中的值不能被删除(或者至少那个值,但那是使用ConncurrentDictionary更难保证。