创建或初始化 |
销毁 |
进入互斥区域 |
离开互斥区域 |
|
关键段CS |
Initialize- CriticalSection |
Delete- CriticalSection |
Enter- CriticalSection |
Leave- CriticalSection |
互斥量Mutex |
CreateMutex |
CloseHandle |
等待系列函数如WaitForSingleObject |
ReleaseMutex |
键段与互斥量都有“线程所有权”概念,可以将“线程所有权”理解成旅馆的房卡,在旅馆前台登记名字拥有房卡后是可以多次进出房间的,其它人则无法进入直到你交出房卡。每个线程必须先通过EnterCriticalSection或WaitForSingleObject来尝试获得“线程所有权”才能调用LeaveCriticalSection或ReleaseMutex。否则会调用失败,这就相当于伪造房卡去办理退房手续——由于登记本上没有你的名字所以会被拒绝。
互斥量能很好的处理“遗弃”情况,因此在多进程之间可以放心的使用。
信号量:
创建 |
销毁 |
递减计数 |
递增计数 |
|
信号量 Semaphore |
Create- Semaphore |
CloseHandle |
等待系列函数如WaitForSingleObject |
Release- Semaphore |
号量在计数大于0时表示触发状态,调用WaitForSingleObject不会阻塞,等于0表示未触发状态,调用WaitForSingleObject会阻塞直到有其它线程递增了计数
事件:
创建 |
销毁 |
使事件触发 |
使事件未触发 |
|
事件Event |
CreateEvent |
CloseHandle |
SetEvent |
ResetEvent |
注意事件的手动置位和自动置位要分清楚,不要混淆了。
更多可关注博客http://blog.csdn.net/morewindows/article/details/7538247