MPI provides mulitple modes for sending messages:
Synchronous mode ( MPI_Ssend): the send does not complete until a matching receive has begun. (Unsafe programs become incorrect and usually deadlock within an MPI_Ssend.)
Buffered mode ( MPI_Bsend): the user supplies the buffer to system for its use. (User supplies enough memory to make unsafe program safe).
Ready mode ( MPI_Rsend): user guarantees that matching receive has been posted.
-- allows access to fast protocols
-- undefined behavior if the matching receive is not posted
MPI_Issend, MPI_Irsend, MPI_Ibsend
Note that an MPI_Recv may receive messages sent with any send mode.