多线程同步互斥的四个实现方法图

来源:互联网 发布:20岁男鞋推荐知乎 编辑:程序博客网 时间:2024/05/26 08:42

一、引言

这篇文章记录是来源于Windows多线程系列的学习笔记,表为原创,实为转载文章,只是为了让自己学的明白,稍微整理了下而已,在此向“MoreWindows”大神致敬!

二、关键段与互斥量Mutex

名称 创建或初始化 销毁 进入互斥区域 离开互斥区域 关键段CS InitializeCritialSection DeleteCriticalSection EnterCriticalSection LeaveCriticalSection 互斥量Mutex CreateMutex CloseHandle 等待系列函数如WaitForSingleObject ReleaseMutex

关键段与互斥量都有“线程所有权”概念,可以将“线程所有权”理解成旅馆的房卡,在旅馆前台登记名字拥有房卡后是可以多次进出房间的,其它人则无法进入直到你交出房卡。每个线程必须先通过EnterCriticalSection或WaitForSingleObject来尝试获得“线程所有权”才能调用LeaveCriticalSection或ReleaseMutex。否则会调用失败,这就相当于伪造房卡去办理退房手续——由于登记本上没有你的名字所以会被拒绝。

三、事件Event

名称 创建 销毁 使事件触发 使事件未触发 事件Event CreateEvent CloseEvent SetEvent ResetEvent

注意事件的手动置位和自动置位要分清楚,不要混淆了

四、信号量Semaphore

名称 创建 销毁 递减计数 递增计数 信号量Semaphore CreateSemaphore CloseHandle 等待系列函数如WaitForSingleObject ReleaseSemaphore

信号量在计数大于0时表示触发状态,调用WaitForSingleObject不会阻塞,等于0表示未触发状态,调用WaitForSingleObject会阻塞知道有其它线程递增了计数

0 0
原创粉丝点击