我有非常复杂的线程同步情况。我有一个从不同的线程访问的集合。一个线程,我们将其命名为“控制线程”,更新集合。其他线程读取集合('读取线程')。我想要实现的逻辑如下:
我应该使用什么线程同步技术?
答案 0 :(得分:4)
只需看看ReaderWriterLock
类,它定义了一个支持单个编写器和多个读者的锁,或者你可以使用ReaderWriterLockSlim
(在.Net 4.0中支持),如果你开始一个更方便新开发(例如,它避免了许多潜在的死锁案例)
来自MSDN:
ReaderWriterLockSlim类似于ReaderWriterLock,但它简化了递归规则以及升级和降级锁定状态的规则。 ReaderWriterLockSlim避免了许多潜在的死锁案例。此外,ReaderWriterLockSlim的性能明显优于ReaderWriterLock。建议将ReaderWriterLockSlim用于所有新开发。*
答案 1 :(得分:4)
使用ReaderWriterLockSlim班级:
表示用于管理资源访问的锁, 允许多个线程进行读取或独占访问以进行写入。
使用ReaderWriterLockSlim保护读取的资源 多个线程,一次由一个线程写入。 ReaderWriterLockSlim允许多个线程处于读取模式, 允许一个线程处于写入模式,具有独占所有权 锁定,并允许一个具有读访问权限的线程可以升级 读取模式,线程可以从中升级到写入模式 必须放弃对资源的读访问权。
Joe Albahari的Threading in C#是一个很好的资源。