我有一个Dictionary<object1, List<object2>
(我为我的结构做的抽象,它有点复杂)。
字典中的列表在非并行上下文中初始化,但是向列表中添加新元素需要线程安全的方法。不会删除项目(字典对象将在事务结束时处理)。此外,键值对仅在初始化时添加,因此在工作期间不会从字典中添加或删除键,仅更新值。
我不能使用并发集合,我被困在一个旧的 .NET 框架中。
起初我用ReadWriteSlimlock
. 好吧,这是非常糟糕的表现。有许多添加操作发生,他们只是等待另一个。仅锁定每个列表是一个更好的解决方案,因为至少我正在为每个键并行做一些事情。另外,加法操作并不简单list.Add(object2)
,加法时还需要在线程安全区进行一些其他复杂的操作。
但我不知道实现它的最佳方法是什么:
lock(dictionary.Value)
?- 使用字典
ReadWriteSlimlock
(每个键一个)? - 还有其他更好的解决方案吗?