仓库源文

.. 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的方式提供等待是很复杂的,不要指望靠简单硬件加速可以搞定。