Давайте предположим, что у меня есть несколько производителей и один потребительский сценарий. Псевдокод для производителя:
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, попробуйте запустить потребителя раньше, чем производитель, и позвольте производителю немного подождать, прежде чем производить первый элемент, чтобы позволить потребителю «потреблять».