【发布时间】:2017-11-05 17:33:53
【问题描述】:
以下伪代码来自Wiki - producer-consumer problem。
semaphore fillCount = 0; // items produced
semaphore emptyCount = BUFFER_SIZE; // remaining space
procedure producer()
{
while (true)
{
item = produceItem();
down(emptyCount);
putItemIntoBuffer(item);
up(fillCount);
}
}
procedure consumer()
{
while (true)
{
down(fillCount);
item = removeItemFromBuffer();
up(emptyCount);
consumeItem(item);
}
}
我的问题是,为什么我们可以同时调用 putItemIntoBuffer 和 removeItemFromBuffer 而无需同步?为什么这里没有竞态条件?
【问题讨论】:
-
为什么你认为没有竞争条件?只有一个生产者和一个消费者的正确操作取决于 putItemIntoBuffer 和 removeItemFromBuffer 的实现。它可以是安全的..或不。对于多个生产者/消费者,您肯定需要锁定队列。
标签: multithreading operating-system semaphore race-condition producer-consumer