Wikipedia对经典的生产者-消费者问题的实现并不充分。在该实现中,消费者实现如下:
procedure consumer()
{
while (true) {
if (itemCount == 0) {
sleep();
}
item = removeItemFromBuffer();
itemCount = itemCount - 1;
if (itemCount == BUFFER_SIZE - 1) {
wakeup(producer);
}
consumeItem(item);
}
}
仅在itemCount == BUFFER_SIZE - 1
. 如果消费者跑得更快(例如连续消费两次),这是否意味着生产者永远不会被唤醒?