• 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线程获取。

  • 相关阅读:
    6、深入理解计算机系统笔记:存储器层次结构,存储技术(1)
    流程图【占无内容】
    程序的三种基本控制架构【只有提纲】
    Console算法[for]穷举法:百钱买百鸡
    Logic算法(狼羊白菜)
    Console算法continue与break的区别?
    Console算法[for]简单画图
    Console算法[for]输出等腰三角形
    Console算法[for]国王与老人的六十四格
    Console算法[for]素数
  • 原文地址:https://www.cnblogs.com/xuejietong/p/8996343.html
Copyright © 2020-2023  润新知