SHMEM_LOCK(3)SHMEM_LOCK(3)NAME
shmem_clear_lock, shmem_set_lock, shmem_test_lock - Releases, locks,
and tests a mutual exclusion memory lock
SYNOPSIS
C or C++:
#include <mpp/shmem.h>
void shmem_clear_lock(long *lock);
void shmem_set_lock(long *lock);
int shmem_test_lock(long *lock);
Fortran:
INTEGER lock, SHMEM_TEST_LOCK
CALL SHMEM_CLEAR_LOCK(lock)
CALL SHMEM_SET_LOCK(lock)
I = SHMEM_TEST_LOCK(lock)DESCRIPTION
The shmem_set_lock routine sets a mutual exclusion lock after waiting
for the lock to be freed by any other PE currently holding the lock.
Waiting PEs are assured of getting the lock in a first-come,
first-served manner.
The shmem_clear_lock routine releases a lock previously set by
shmem_set_lock after ensuring that all local and remote stores
initiated in the critical region are complete.
The shmem_test_lock function sets a mutual exclusion lock only if it
is currently cleared. By using this function, a PE can avoid blocking
on a set lock. If the lock is currently set, the function returns
without waiting.
These routines are appropriate for protecting a critical region from
simultaneous update by multiple PEs. They accept the following
argument:
lock A symmetric data object that is a scalar variable or an
array of length 1. This data object must be set to 0 on all
processing elements (PEs) prior to the first use. lock must
be of type integer. If you are using Fortran, it must be of
default kind.
NOTES
The term symmetric data object is defined on intro_shmem(3).
RETURN VALUES
The shmem_test_lock function returns 0 if the lock was originally
cleared and this call was able to set the lock. A value of 1 is
returned if the lock had been set and the call returned without
waiting to set the lock.
SEE ALSOintro_shmem(3)