临界区:一种保证在某一时刻只有一个线程能访问数据的简便办法。它只能够在同一进程内部使用。 对线程的串行化方法来访问公共资源或一段代码,速度快,适合控制数据访问。安全
主要API函数 产生临界区: InitializeCriticalSection函数
删除临界区: DeleteCriticalSection线程
进入临界区: EnterCriticalSection对象
退出临界区: LeaveCriticalSection进程
互斥对象:互斥对象跟临界区类似,但它不单单可以在同一应用程序不一样线程中实现资源的安全共享,并且能够在不一样应用程序的线程之间实现对资源的安全共享,固然下面二者也有这个特色。 只有拥有互斥对象的线程才有访问公共资源的权限。互斥对象只有一个,因此能保证公共资源不会同时被多个线程访问。事件
主要API函数 建立互斥量: CreateMutex资源
打开一个存在的互斥量: OpenMutex同步
释放互斥量的使用权:ReleaseMutexit
关闭互斥量:CloseHandleio
信号量:使用信号量(信标)最重要用途是:信号容许多个线程同时使用共享资源,它指出了同时访问共享资源的线程最大数目。
主要API函数( 函数和使用方法都与互斥对象类似)
建立信号量:CreateSemaphore 传入的参数能够指定信号量的初始值。
ReleaseSemaphore
事件:用来通知其余进程/线程某件操做已经完成。还能够实现对多个线程的优先级比较的操做。
API函数有建立,打开事件对象等
特殊点的是能够用函数SetEvent人工设置事件为有无信号状态,
所以建立事件对象时能够有两种方式,一种为自动重置,一种为人工重置。
只有人工重置方式建立的事件对象才能正确使用函数SetEvent。
在MFC中对于各类同步对象都提供了相对应的类CCtiticalSection,CMutex,CSemaphore ,CEvent, 另外为使用等待功能封装了两个类:CSingleLock和CMultiLock。这些类方便了使用这些同步对象