四种方式:
临界区
互斥量
信号量
事件
特点 | 操作原语 | MFC下的操作 | |
临界区 | 虽然临界区同步速度很快,但却只能用来同步本进程内的线程 |
EnterCriticalSection()(定义在WinBase.h中) |
CCriticalSection类 |
互斥量 |
比临界区复杂。因为使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享, 而且可以在不同应用程序的线程之间实现对资源的安全共享 |
CreateMutex()创建一个互斥量 OpenMutex()打开一个互斥量 ReleaseMutex()释放互斥量 WaitForMultipleObjects()等待互斥量对象 |
CMutex |
信号量 | 信号允许多个线程同时使用共享资源,它指出了同时访问共享资源的线程最大数目 | CreateSemaphore()创建一个信号量 OpenSemaphore()打开一个信号量 ReleaseSemaphore()释放信号量 WaitForSingleObject()等待信号量 |
HANDLE |
事件 | 可以实现不同进程中的线程同步操作 | CreateEvent()创建一个信号量 OpenEvent()打开一个事件 SetEvent()回置事件 WaitForSingleObject()等待一个事件 WaitForMultipleObjects() |
HANDLE |
参考文章: