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

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

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 Ответ

0 голосов
/ 13 февраля 2020

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...