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

本文介绍了一个名为SimpleWaitLock的简单等待锁实现。该锁利用AutoResetEvent来管理线程的进入与离开,通过WaitOne和Set方法确保线程同步,并有效避免线程自旋以节省CPU资源。
 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值