.. Kenneth Lee 版权所有 2020
:Authors: Kenneth Lee :Version: 1.0
cond/mutex模型
本文给一位同学快速介绍一下pthread cond/mutex模型,作为他进行另一个设计的参考。
pthread_cond用于实现提供者-消耗者模型。示意如下:
.. figure:: _static/cond_mutex模型1.jpg
这个图一画,你就发现这个破绽是非常明显的,因为可以发生这样的问题:
.. figure:: _static/cond_mutex模型2.jpg
pthread_cond的解决方案是再加一重保证,让signal发生在wait之后:
.. figure:: _static/cond_mutex模型3.jpg
这个实际复杂了很多,它要处理两种情形:
提供者先抢到mutex,消费者就进不去,等有数据,发完signal,而且unlock了,才轮到消 费者,这时消费者要立即检查数据,有数据就不能wait了。
第二种情况是消费者先拿到锁,提供者就一定进不去,这时如果消费者确定没有数据了, 就用cond wait去等待,这个wait会产生一个unlock,解锁提供者,提供者这时准备数据然 后signal消费者,就必然是有效的。
所以,其实用这种cond的方式提供等待是很复杂的,不要指望靠简单硬件加速可以搞定。