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)