繁体   English   中英

C#复杂的线程同步

[英]C# complex thread synchronization

我有相当复杂的线程同步情况。 我有一个从不同的线程访问的集合。 一个线程,我们将其命名为“控制线程”,更新集合。 其他线程读取集合('读取线程')。 我想要实现的逻辑如下:

  1. 读取线程可以同时读取集合。
  2. 当Control线程需要更新集合时:
    • 在所有正在使用集合的读取线程完成其工作之前,控制线程不应启动更新。
    • 但是当Control线程正在等待读取线程时,其他尚未开始使用集合的读取线程不应该启动 - 它们应该等到Control thread更新集合。

我应该使用什么线程同步技术?

只需看看ReaderWriterLock类,它定义了一个支持单个编写器和多个读取器的锁,或者你可以使用ReaderWriterLockSlim (在.Net 4.0中支持),如果你正在开始一个新的开发,它会更方便(例如它避免了很多潜在的情况)僵局)

来自MSDN

ReaderWriterLockSlim类似于ReaderWriterLock,但它简化了递归规则以及升级和降级锁定状态的规则。 ReaderWriterLockSlim避免了许多潜在的死锁案例。 此外,ReaderWriterLockSlim的性能明显优于ReaderWriterLock。 ReaderWriterLockSlim推荐用于所有新开发。*

使用ReaderWriterLockSlim类:

表示用于管理对资源的访问的锁,允许多个线程进行读取或独占访问以进行写入。

使用ReaderWriterLockSlim来保护由多个线程读取并由一个线程一次写入的资源。 ReaderWriterLockSlim允许多个线程处于读取模式,允许一个线程处于具有锁独占所有权的写模式,并允许一个具有读访问权限的线程处于可升级读模式,线程可以从该模式升级到写模式必须放弃对资源的读访问权。

Joe Albahari 在C#中线程是一个很好的资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM