前言
线程同步技术之一:Event,事件作为多线程同步的重要方式之一,学习它的使用是多线程编程必不可少的步骤,我们通过几个函数来分例剖析下该线程同步方法
正文
事件的创建通过createEvent函数实现,下面是函数的介绍:
The CreateEvent function creates a named or an unnamed event object.
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPTSTR lpName);
第一个参数指出安全策略,一般采用默认即可
第二个参数指明是否为手动重置。如果为true,那么必须手动调用ResetEvent来使事件置为无信号状态;如果为false,则系统会自动置为无信号状态
第三个参数指明创建事件时信号的默认值,true为有信号,false为无信号
第四个参数为事件的命名。这里表明该事件到底是命名还是匿名的事件
通过上述介绍我们同样了解到SetEvent是用来设定事件为有信号,ResetEvent设置事件为无信号。
那事件有信号和无信号到底有什么用,又是怎么用的呢?可以想象以下这样的场景,比如一群人在等候就餐,服务员喊道:38号(有信号)。那38号顾客就可以去就餐,对于那些没被叫道号(无信号)则需继续排队。同样如此,对于多线程只有当该线程有信号时,才能获取CPU事件进而执行相关操作;如果没有信号