码迷,mamicode.com
首页 > 其他好文 > 详细

条件变量

时间:2017-05-11 13:31:35      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:nal   查询   参数   原因   信号   broadcast   条件变量   防止   com   

https://www.zhihu.com/question/24116967

吴志强的回答,回答下高大月的评论。

 

 

1.为什么要有互斥量?

因为要用来防止『查询条件符合则等待』和『设置条件则释放信号』两个事情发生竞争条件。

 

2.为什么要作为参数传进去?

虚假唤醒是很难避免的,其中一个原因和调度相关,signal和broadcast只是把一个或多个等待的线程放到ready queue上,并不保证马上就调度到,因此线程从pthread_cond_wait返回的时候条件有可能又不成立了。举个例子,两个线程AB在wait,第三个线程将pass改成1,然后broadcast;线程A唤醒后把pass改成0,接着线程B唤醒,这时候对B来说条件已经不满足了。因此用while检查条件是必须的。检查条件的时候必然要拿锁,这时候pthread_cond_wait退出前重新获得锁就显的很方便了。

条件变量

标签:nal   查询   参数   原因   信号   broadcast   条件变量   防止   com   

原文地址:http://www.cnblogs.com/TsAihS/p/6840422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!