Продюсер-потребитель с семпахорами
Проблема производителя-потребителя, взятая из 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 года. Я удалил эту строку сейчас.
В общем, код в Википедии часто редактируется многими людьми в течение длительного периода времени, поэтому довольно легко ввести в него ошибки.