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
Non-blocking versions:
MPI_Issend, MPI_Irsend, MPI_Ibsend
Note that an MPI_Recv may receive messages sent with any send mode.