在这种情况下,我们真的需要互斥锁吗?

时间:2018-11-09 05:12:51

标签: linux synchronization mutex semaphore binary-semaphore

维基百科针对多生产者-消费者问题的solution使用互斥量和信号量。

mutex buffer_mutex; 
semaphore fillCount = 0;
semaphore emptyCount = BUFFER_SIZE;

procedure producer() 
{
    while (true) 
    {
        item = produceItem();
        down(emptyCount);
        down(buffer_mutex);
        putItemIntoBuffer(item);
        up(buffer_mutex);
        up(fillCount);
    }
}

procedure consumer() 
{
    while (true) 
    {
        down(fillCount);
        down(buffer_mutex);
        item = removeItemFromBuffer();
        up(buffer_mutex);
        up(emptyCount);
        consumeItem(item);
    }
}

使用互斥量的原因是,当多个生产者和消费者位于关键部分时,强制执行互斥。我的问题是,既然目标始终是在关键部分有一个 single 线程,为什么不只使用二进制信号量来确保这一点呢?也就是说,如果在该示例中使用二进制信号量,是否可以取消互斥锁?

0 个答案:

没有答案