zoukankan      html  css  js  c++  java
  • ReaderWriterLockSlim使用示例

     1     /// <summary>
     2     /// ReaderWriterLockSlim使用示例
     3     /// </summary>
     4     internal sealed class Transaction : IDisposable
     5     {
     6         //表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问
     7         private readonly ReaderWriterLockSlim m_readerWriterLockSlim = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
     8 
     9         private DateTime m_timeOfLastTrans;
    10 
    11         public void PerformTransaction()
    12         {
    13             //尝试进入写入模式锁定状态
    14             m_readerWriterLockSlim.EnterWriteLock();
    15 
    16             //以下代码拥有对数据的独占访问权限
    17             m_timeOfLastTrans = DateTime.Now;
    18 
    19             // 减少写入模式的递归计数,并在生成的计数为 0(零)时退出写入模式
    20             m_readerWriterLockSlim.ExitWriteLock();
    21         }
    22 
    23         public DateTime LastTransaction
    24         {
    25             get
    26             {
    27                 //尝试进入读取模式锁定状态
    28                 m_readerWriterLockSlim.EnterReadLock();
    29 
    30                 //以下代码拥有对数据的共享访问权限
    31                 DateTime dateTime = m_timeOfLastTrans;
    32 
    33                 //减少读取模式的递归计数,并在生成的计数为 0(零)时退出读取模式
    34                 m_readerWriterLockSlim.ExitReadLock();
    35 
    36                 return dateTime;
    37             }
    38         }
    39 
    40         public void Dispose()
    41         {
    42             m_readerWriterLockSlim.Dispose();
    43         }
    44     }

      1.一个线程向数据写入时,请求访问的其它所有线程都被阻塞。

      2.一个线程从数据读取时,请求读取的其它所有线程允许继续执行,但请求写入的所有线程仍被阻塞。

      3.向数据写入的线程结束后,要么解除一个写入线程的阻塞,使它能向数据写入,要么解除所有读取线程的阻塞,使他们能并发读取数据。如果没有线程被阻塞,锁就进入可以自由使用的状态,可供下一个reader或writer线程获取。

      4.从数据读取的所以线程结束后,一个writer线程被解除阻塞,使它能向数据写入。如果没有线程被阻塞,锁就进入可以自由使用的状态,可供下一个reader或writer线程获取。

  • 相关阅读:
    Python异常处理详解
    Python with/as和contextlib上下文管理使用说明
    Python面向对象基础:编码细节和注意事项
    搞懂Python的类和对象名称空间
    Python丢弃返回值
    Python面向对象基础:设置对象属性
    python的dir()和__dict__属性的区别
    Go Web:RESTful web service示例
    Go处理json数据
    json数据格式说明
  • 原文地址:https://www.cnblogs.com/xuejietong/p/8996343.html
Copyright © 2011-2022 走看看