TsAihS

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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退出前重新获得锁就显的很方便了。

posted on 2017-05-11 12:52  TsAihS  阅读(127)  评论(0编辑  收藏  举报