我有一个Dictionary<object1, List<object2>
(我为我的结构,这是一个更复杂一点的抽象化)。确保线程安全操作的字典中的值的列表
字典内的列表在非并行上下文中初始化,但向列表中添加新元素需要线程安全方法。删除项目不会发生(字典对象将在事务结束时处理)。 此外,键值对仅在初始化时添加,因此在工作期间不会从字典中添加或删除任何键,只更新值。
我不能使用concurent集合,我被困在旧的.NET Framework中。
起初,我用ReadWriteSlimlock
锁定了整本字典。那么,这是非常糟糕的表现明智的。有很多添加操作发生,他们只是等待另一个。只锁定每个列表是一个更好的解决方案,因为至少我为每个密钥并行执行了一些操作。 另外,添加操作不是简单的list.Add(object2)
,其他一些复杂操作需要在添加线程安全区域时发生。
但我不知道是什么来实现它的最好办法:
lock(dictionary.Value)
?- 使用
ReadWriteSlimlock
的字典(每个键一个)? - 还有其他更好的解决方案吗?
由于添加是我的实际问题,我真的很喜欢封装ideea。谢谢你的提示! –