我阅读了有关生产者-消费者问题https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem
的维基百科。它提到在下面的代码中,当只有一个生产者和消费者时,它可以正常工作。
我的问题是,如果生产者在做up(fillCount);
而消费者在做down(fillCount);
,那么结果仍然正确吗?因为我认为这不是原子写操作。
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);
}
}