具有信号量的生产者 - 消费者

时间:2012-01-24 20:08:15

标签: algorithm

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。该计划何时到达,为什么需要它?

1 个答案:

答案 0 :(得分:5)

我认为代码没有意义。循环永远不会结束,因此有问题的行永远不会到达。

代码最初不包含该行,而且是added by an anonymous editor in March 2009I removed that line now.

一般来说,维基百科上的代码经常被很多人编辑很长一段时间,因此很容易将错误引入其中。