18.2.212. shmem_test_lock

shmem_set_lock(3), shmem_clear_lock(3), shmem_test_lock(3) - 释放、锁定和测试互斥内存锁。

18.2.212.1. 概述

C或C++:

#include <mpp/shmem.h>

void shmem_clear_lock(volatile long *lock)

void shmem_set_lock(volatile long *lock)

int shmem_test_lock(volatile long *lock)

Fortran:

INCLUDE "mpp/shmem.fh"

INTEGER lock, SHMEM_TEST_LOCK

CALL SHMEM_CLEAR_LOCK(lock)

CALL SHMEM_SET_LOCK(lock)

I = SHMEM_TEST_LOCK(lock)

18.2.212.2. 描述

shmem_set_lock 例程会在等待当前持有锁的其他PE释放该锁后,设置一个互斥锁。等待的PE将按照先到先得的方式确保获得锁。

shmem_clear_lock 例程会在确保临界区内发起的所有本地和远程存储操作完成后,释放之前由 shmem_set_lock 设置的锁。

shmem_test_lock 函数仅在互斥锁当前处于未锁定状态时才会设置锁。通过使用此函数,PE可以避免在已锁定的锁上阻塞。如果锁当前已被锁定,该函数会立即返回而不等待。这些例程适用于保护关键区域免受多个PE同时更新的情况。它们接受以下参数:

lock

一种对称数据对象,可以是标量变量或长度为1的数组。该数据对象在首次使用前必须在所有处理单元(PEs)上初始化为0。lock必须是整数类型。如果使用Fortran语言,则必须采用默认类型。

18.2.212.3. 注意事项

对称数据对象的定义请参见intro_shmem(3)。

18.2.212.4. 返回值

如果锁最初处于未锁定状态且本次调用成功设置了锁,则shmem_test_lock函数返回0。如果锁已被锁定且调用未等待设置锁就返回,则返回值为1。

另请参阅

intro_shmem(3)