Synchronous message passing is when routines return after the message transfer has been completed.
Thus, a request to send is transferered from process 0 to process 1, an acknowledgement immediately sent back, and the data transferred. A message buffer must be created to hold data between the send and receive. If the routine returns immediately, the routine is nonblocking. For example, process 0 may issue a send, pack data into the buffer, and push the buffer out. But the message cannot be received until process 1 issues the appropriate receive.