【问题标题】:How should I keep 2 ConcurrentDictionaries in sync?我应该如何保持 2 个并发词典同步?
【发布时间】:2012-05-19 14:56:07
【问题描述】:
我喜欢ConcurrentDictionary 的无锁操作,并在两个对象中使用它:
ConcurrentDictionary<datetime,myObj> myIndexByDate
ConcurrentDictionary<myObjSummary, ConcurrentDictionary<int, myObj> myObjectSummary Index
这两个对象需要保持同步。这样做的唯一方法是使用锁,从而避免并发字典的所有好处吗?
【问题讨论】:
标签:
c#
multithreading
locking
task-parallel-library
concurrentdictionary
【解决方案1】:
我将创建一个包含 2 个字典的自定义类,并仅对容易更改字典的方法(添加、删除)使用锁定。
您不会失去并发字典的好处,因为与使用普通字典相比,此方法所需的代码要少得多。
【解决方案2】:
ConcurrentDictionary 仅对特定实例的操作是“线程安全的”。例如在调用 ConcurrentDictionary.TryAdd() 调用时,没有其他线程可以修改集合...
这并不意味着当您从一个字典中获取一个值并将其添加到另一个字典时,该值在您将其添加到第二个字典时仍然存在于原始字典中。
您可能有一个不变量,详细说明当您将一个值从一个字典移动到另一个字典时,无法删除原始字典中的任何值(或至少 那个 值,但这是使用 ConncurrentDictionary 更难保证。