内核模式构造-Event构造(WaitLock)

 1     internal sealed class SimpleWaitLock:IDisposable
 2     {
 3         //Enter()和Leave()中使用m_AutoResetEvent都将迫使调用线程做用户模式和内核模式间的转换,这点十分影响性能
 4         //存在竞争时,输掉的线程会被内核阻止,内核阻止的特点是线程不会“自旋”,从而节省了CPU
 5         private readonly AutoResetEvent m_AutoResetEvent;
 6 
 7         public SimpleWaitLock()
 8         {
 9             //初始化可自由使用
10             //true将初始状态设置为终止状态,false非终止
11             //true有信号(不会阻塞),false无信号
12             m_AutoResetEvent = new AutoResetEvent(true);
13         }
14 
15         public void Enter()
16         {
17             //WaitOne()将阻塞到其有信号为止
18             //若调用WaitOne的时候就有信号则不会阻塞
19             //在内核中阻塞,直到资源可用
20             m_AutoResetEvent.WaitOne();
21         }
22 
23         public void Leave()
24         {
25             //将状态设置为有信号
26             //通知其它(AutoResetEvent保证只会有一个)线程使用资源
27             m_AutoResetEvent.Set();
28         }
29 
30         public void Dispose()
31         {
32             m_AutoResetEvent.Dispose();
33         }
34     }
原文地址:https://www.cnblogs.com/xuejietong/p/8641540.html