Продюсер-потребитель с семпахорами

Проблема производителя-потребителя, взятая из 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)
    }
}

Мой вопрос: почему у продюсера есть up(fillCount) //the consumer may not finish before the producer после цикла while. Когда программа будет работать и зачем она нужна?

Ответ 1

Я думаю, что этот код не имеет смысла. Цикл никогда не заканчивается, поэтому соответствующая строка никогда не может быть достигнута.

код первоначально не содержать эту строку, и это было добавил анонимный редактор в марте 2009 года. Я удалил эту строку сейчас.

В общем, код в Википедии часто редактируется многими людьми в течение длительного периода времени, поэтому довольно легко ввести в него ошибки.