Note the asymmetry between send and receive operations. A receive asymmetry operation may accept messages from an arbitrary sender, but a send operation must specify a unique receiver. This matches a ``push'' communication mechanism, where data transfer is effected by the sender, rather than a ``pull'' mechanism, where data transfer is effected by the receiver.
Source equal to destination is allowed, that is, a process can send a
message to itself.
However, for such a communication to succeed, it is required that the message be
buffered by the system between the completion of the send call and the
start of the receive call. The amount of buffer space available and the buffer
allocation policy are implementation dependent.
Therefore, it is unsafe
and non-portable to send
self-messages with the standard-mode, blocking send and receive
self messagemessage, self
operations described so far, since this may lead to deadlock.
More discussions of this appear in Section .