Проблема производителя / потребителя - изменение порядка семафоров

Давайте предположим, что у меня есть несколько производителей и один потребительский сценарий. Псевдокод для производителя:

product = produce()
wait(empty)
wait(mutex)
array[in] = product
in = (in + 1) % n
signal(mutex)
signal(full)

Псевдокод для потребителя:

wait(full)
product = array[out]
out = (out + 1) % n
signal(empty)
useProduct()

Что произойдет, если я поменяю семафоры на потребителя, т.е. на сигнал (пустой) до ожидания (полный) ?? Я пытался реализовать этот сценарий в Java, но я не вижу никаких изменений.

Всего 1 ответ


wait(full) есть, чтобы уведомить потребителя, что есть что потреблять. Если вы сначала не выдадите wait(full) , потребитель может потреблять до того, как производитель что-либо произвел.

Если вы тестируете это на Java, попробуйте запустить потребителя раньше, чем производитель, и позвольте производителю немного подождать, прежде чем производить первый элемент, чтобы позволить потребителю «потреблять».


Есть идеи?

10000