0

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

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

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

4

2 回答 2

3

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

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

于 2012-05-20T23:26:30.443 回答
1

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

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

您可能有一个不变量,详细说明当您将一个值从一个字典移动到另一个字典时,原始字典中的任何值都不能被删除(或者至少是那个值,但使用 ConncurrentDictionary 很难保证。

于 2012-05-20T23:14:47.500 回答