首页 > 代码库 > 条件变量
条件变量
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退出前重新获得锁就显的很方便了。
条件变量
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。