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