zoukankan      html  css  js  c++  java
  • 简单混合锁(HybridLock)

     1     internal sealed class SimpleHybridLock : IDisposable
     2     {
     3         //基元用户模式构造使用
     4         private int m_waiters = 0;
     5 
     6         //基元内核模式构造
     7         private AutoResetEvent m_waiterLock = new AutoResetEvent(false);
     8 
     9         public void Enter()
    10         {
    11             //指出该线程想要获得锁
    12             if (Equals(Interlocked.Increment(ref m_waiters), 1))
    13             {
    14                 //无竞争,直接返回
    15                 return;
    16             }
    17 
    18             //另一个线程拥有锁(发生竞争),使这个线程等待
    19             //线程会阻塞,但不会在CPU上“自旋”,从而节省CPU
    20             //这里产生较大的性能影响(用户模式与内核模式之间转换)
    21             //待WaitOne返回后,这个线程拿到锁
    22             m_waiterLock.WaitOne();
    23         }
    24 
    25         public void Leave()
    26         {
    27             //该线程准备释放锁
    28             if (Equals(Interlocked.Decrement(ref m_waiters), 0))
    29             {
    30                 //无线程等待,直接返回
    31                 return;
    32             }
    33 
    34             //有线程等待则唤醒其中一个
    35             //这里产生较大的性能影响(用户模式与内核模式之间转换)
    36             m_waiterLock.Set();
    37         }
    38 
    39         public void Dispose()
    40         {
    41             m_waiterLock.Dispose();
    42         }
    43     }
  • 相关阅读:
    asp.net mvc验证那些事
    RemoteAttribute Class
    代理自动配置文件PAC
    海康威视摄像头密码重置
    开漏输出与推挽输出
    半导体发光二极管工作原理
    晶振电路原理
    下一代的iPaaS平台
    重温UAT
    Ira主题shopify模板修改
  • 原文地址:https://www.cnblogs.com/xuejietong/p/8640888.html
Copyright © 2011-2022 走看看