锁方式
MPI_WIN_LOCK(lock_type, rank, assert, win)
INlock_type锁类型
INrank 加锁窗口所在的进程标识号
INassert 程序的声明
INwin窗口对象
int MPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win)
MPI_WIN_LOCK(LOCK_TYPE, RANK, ASSERT, WIN, IERROR)
INTEGER LOCK_TYPE, RANK, ASSERT, WIN, IERROR

通过加锁方式,可以避免多个进程同时对同一窗口访问造成数据的不一致。

图16-5 通过加锁与开锁实现对同一窗口的互斥访问

MPI_WIN_LOCK对指定进程的窗口加锁,一旦加锁成功,该进程就可以对另一个进程的远程窗口进行访问。加锁的类型有两种,一种是互斥型,一种是共享型。对于互斥型的锁,一旦加上就不允许其它的进程对该远程窗口进行任何访问操作,这样可以确保当本进程在访问该窗口时,不会因为其它进程的介入而造成数据的不一致。如果是共享型的锁,则其它的进程只能加共享的锁,由程序员来保证多个进程对该窗口共享访问的一致性(比如可以有多个进程同时对一个窗口进行读取,当不运行其它的进程对该窗口进行写操作)。 MPI_WIN_UNLOCK(rank, win)
INrank被开锁窗口的进程标识号
INwin 窗口对象
int MPI_Win_unlock(int rank, MPI_Win win)
MPI_WIN_UNLOCK(RANK, WIN, IERROR)
INTEGER RANK, WIN, IERROR

MPI_WIN_UNLOCK打开由本进程对rank进程窗口的加锁,从而允许其它的进程对该窗口进行加锁和访问操作。它和MPI_WIN_LOCK是严格匹配的,有一个加锁操作,就必然有一个相应的开锁操作。