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

本文关键字:同步 并发 何保持 我应该 | 更新日期: 2023-09-27 18:34:37

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

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

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

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

我会创建一个包含 2 个字典的自定义类,并且仅在易受更改字典的方法上使用锁(添加、删除(。

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

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

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

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