При передаче сообщений (производитель-потребитель) блокирующая отправка происходит, когда процесс отправки блокируется до тех пор, пока сообщение не будет получено принимающим процессом или почтовым ящиком.

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

Решение проблемы производителя-потребителя становится тривиальным, когда мы используем блокирующие операторы send() и Receive().

Почему это становится тривиальным?

0
Jeff Schaller 16 Фев 2018 в 22:30
Потому что он синхронизирует отправителя и получателя?
 – 
Kusalananda
16 Фев 2018 в 21:45
В книге это не объясняется
 – 
Qwerto
16 Фев 2018 в 22:39

2 ответа

В книге («Концепции операционной системы» — Зильбершац, Гальвин, Ганье), которую вы, кажется, цитируете, говорится по этому поводу:

Возможны различные комбинации send() и receive(). Когда и send(), и Receive() блокируются, у нас происходит рандеву между отправителем и получателем. Решение проблемы производитель-потребитель становится тривиальным, когда мы используем блокирующие операторы send() и receive(). Производитель просто вызывает блокирующий вызов send() и ждет, пока сообщение не будет доставлено либо получателю, либо почтовому ящику. Аналогичным образом, когда потребитель вызывает Receive(), он блокируется до тех пор, пока сообщение не будет доступно.

Мне это кажется довольно ясным.

1
roaima 17 Фев 2018 в 00:20
Таким образом, он синхронизирует отправителя и получателя. :-)
 – 
Kusalananda
17 Фев 2018 в 00:22

Ответ на ваш вопрос: попробуйте реализовать решение проблемы «потребитель-производитель», когда чтение и запись не блокируются.

Если вы сделаете это, то есть если вы подумаете, как решить проблему с неблокирующими операциями чтения/записи, вы быстро обнаружите, что вам нужно заняться управлением буфером. Затем вы обнаружите, что в параллельной ситуации вам приходится иметь дело с справедливостью чтения/записи и т. д. Проблема очень быстро становится многогранной, причем некоторые подзадачи (справедливость) не имеют очевидного решения.

0
Tomáš Pospíšek 17 Фев 2018 в 00:13