多线程同步
一、 临界区
1. 临界区作用
线程在执行代码时,将代码锁定,不允许其他线程执行, 只有线程离开后,其他线程才能使用这个代码。
2. 临界区的使用
2.1 初始化临界区 InitializeCriticalSection
2.2 临界区加锁 EnterCriticalSection
2.3 临界区解锁 LeaveCriticalSection
2.4 释放临界区 DeleteCriticalSection
二、 事件
1. 事件:
通知线程的作用,当收到事件时, 线程可以执行,是否线程将等候事件的发生。
2. 事件的用法
2.1 创建事件
HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, //安全属性 BOOL bManualReset, //重置方式 TRUE: 手动重置 FALSE:自动重置 BOOL bInitialState, //初始化状态 TRUE: 信号 FALSE: 无信号 LPTSTR lpName //内核对象名称 );
返回创建好的事件句柄。
如果,bManualReset = FALSE, 系统在等候到事件后,会自动将事件重置为无信号状态。
如果,bManualReset = TRUE, 必须手动重置状态, 使用函数为: ResetEvnet函数重置为无信号状态。
2.2 等候事件: WaitForSingleObject
2.3 触发事件: SetEvent
2.4 关闭事件: CloseHandle