Сообщения
Для прямой и непрямой адресации достаточно двух примитивов, чтобы описать передачу сообщений по линии связи – send и receive. В случае прямой адресации мы будем обозначать их так:
send(P, message) – послать сообщение message процессу P; |
receive(Q, message) – получить сообщение message от процесса Q. |
В случае непрямой адресации мы будем обозначать их так:
send(A, message) – послать сообщение message в почтовый ящик A; |
receive(A, message) – получить сообщение message из почтового ящика A. |
Примитивы send и receive уже имеют скрытый от наших глаз механизм взаимоисключения. Более того, в большинстве систем они уже имеют и скрытый механизм блокировки при чтении из пустого буфера и при записи в полностью заполненный буфер. Реализация решения задачи producer-consumer для таких примитивов становится неприлично тривиальной. Надо отметить, что, несмотря на простоту использования, передача сообщений в пределах одного компьютера происходит существенно медленнее, чем работа с семафорами и мониторами.