多线程同步

一、 临界区

  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

原文地址:https://www.cnblogs.com/icodecpp/p/3169323.html