为什么在调用之前需要锁定互斥锁pthread_cond_wait?
另外,在调用之前是否需要锁定(在同一个互斥锁上)pthread_cond_signal?
谢谢你的帮助.
Nem*_*emo 26
为什么在调用pthread_cond_wait之前需要锁定互斥锁?
因为否则会有不可避免的竞争条件.
互斥锁可以保护共享状态.条件变量与状态上的某个谓词("条件")相关联.基本的想法是你想要:
1)检查谓词
2)如果谓词是假的,则进入睡眠状态直到它变为真
在并发系统中,某些线程总是可以在(1)和(2)之间使谓词成立.为了避免这种竞争,你必须在(1)之前持有互斥锁,并且必须在执行(2)时原子地释放它.
例如,对于队列,谓词可能是"队列不为空".但是在您检查队列是否为非空以及您进入休眠状态的时间之间,其他一些线程可能会向队列添加一些内容.
因此,您必须在检查谓词时以及在调用pthread_cond_wait时保持互斥锁.
另外,在调用pthread_cond_signal之前是否需要锁定(在同一个互斥锁上)?
据我所知,这没有根本问题; 它只是引入潜在的低效率.
在这里,您正在修改的任何共享状态(从而使谓词成立)必须受到互斥锁的保护.因此,无论何时您想要发出信号,您都必须已经拥有互斥锁.
如果在发出条件信号之前释放互斥锁,则由于某些其他线程的操作,谓词之间可能会变为假.这种竞争不会导致失败,因为等待条件的任何线程必须在继续之前检查谓词...但为什么要通过麻烦呢?
底线:只需按照说明操作,您甚至不必考虑这些问题.:-)
| 归档时间: |
|
| 查看次数: |
8248 次 |
| 最近记录: |