C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步

2019-12-30 11:04:15王旭

易采站长站为您分析C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步的方法,涉及C#多线程操作读写锁定的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了C#多线程编程之使用ReaderWriterLock类实现多用户读与单用户写同步的方法。,具体如下:

摘要:C#提供了System.Threading.ReaderWriterLock类以适应多用户读/单用户写的场景。该类可实现以下功能:如果资源未被写操作锁定,那么任何线程都可对该资源进行读操作锁定,并且对读操作锁数量没有限制,即多个线程可同时对该资源进行读操作锁定,以读取数据。

使用Monitor或Mutex进行同步控制的问题:由于独占访问模型不允许任何形式的并发访问,这样的效率总是不太高。许多时候,应用程序在访问资源时是进行读操作,写操作相对较少。为解决这一问题,C#提供了System.Threading.ReaderWriterLock类以适应多用户读/单用户写的场景。该类可实现以下功能:如果资源未被写操作锁定,那么任何线程都可对该资源进行读操作锁定,并且对读操作锁数量没有限制,即多个线程可同时对该资源进行读操作锁定,以读取数据。如果资源未被添加任何读或写操作锁,那么一个且仅有一个线程可对该资源添加写操作锁定,以写入数据。简单的讲就是:读操作锁是共享锁,允许多个线程同时读取数据;写操作锁是独占锁,同一时刻,仅允许一个线程进行写操作。

示例代码如下:

 

 
  1. using System;  using System.Threading; 
  2. namespace ProcessTest  { 
  3. class Program  { 
  4. //资源  static int theResource = 0; 
  5. //读、写操作锁  static ReaderWriterLock rwl = new ReaderWriterLock(); 
  6. static void Main(string[] args)  { 
  7. //分别创建2个读操作线程,2个写操作线程,并启动  Thread tr0 = new Thread(new ThreadStart(Read)); 
  8. Thread tr1 = new Thread(new ThreadStart(Read));  Thread tr2 = new Thread(new ThreadStart(Write)); 
  9. Thread tr3 = new Thread(new ThreadStart(Write));  tr0.Start(); 
  10. tr1.Start();  tr2.Start(); 
  11. tr3.Start();  //等待线程执行完毕 
  12. tr0.Join();  tr1.Join(); 
  13. tr2.Join();  tr3.Join();