从Wikipedia获取的生产者 - 消费者问题:
semaphore mutex = 1
semaphore fillCount = 0
semaphore emptyCount = BUFFER_SIZE
procedure producer() {
while (true) {
item = produceItem()
down(emptyCount)
down(mutex)
putItemIntoBuffer(item)
up(mutex)
up(fillCount)
}
up(fillCount) //the consumer may not finish before the producer.
}
procedure consumer() {
while (true) {
down(fillCount)
down(mutex)
item = removeItemFromBuffer()
up(mutex)
up(emptyCount)
consumeItem(item)
}
}
我的问题 - 为什么生产者在while循环之后有up(fillCount) //the consumer may not finish before the producer
。该计划何时到达,为什么需要它?
答案 0 :(得分:5)
我认为代码没有意义。循环永远不会结束,因此有问题的行永远不会到达。
代码最初不包含该行,而且是added by an anonymous editor in March 2009。 I removed that line now.
一般来说,维基百科上的代码经常被很多人编辑很长一段时间,因此很容易将错误引入其中。