可能死锁的情形
CALL MPI_COMM_RANK(comm, rank, ierr)
IF (rank.EQ.0) THEN
 CALL MPI_SEND(sendbuf, count, MPI_REAL, 1, tag, comm, ierr)
 CALL MPI_RECV(recvbuf, count, MPI_REAL, 1, tag, comm, status, ierr)
ELSE (rank .EQ.1)
 CALL MPI_SEND(sendbuf, count, MPI_REAK, 0, tag, comm, status, ierr)
 CALL MPI_RECV(recvbuf, count, MPI_REAL, 0, tag, comm, status, ierr)
END IF

讲解:

可能死锁的情形

 

图7-2 可能死锁的情形

由于进程0或进程1的发送需要系统提供缓冲区(在MPI的四种通信模式中有详细的解释),如果系统缓冲区不足,则进程0或进程1的发送将无法完成,相应的,进程1和进程0的接收也无法正确完成。显然对于需要相互交换数据的进程,直接将两个发送语句写在前面也是不安全的。