« Return to documentation listing
Table of Contents
shmem_set_lock(3), shmem_clear_lock(3), shmem_test_lock(3) - Releases,
locks, and tests a mutual exclusion memory lock.
C or 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)
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
arguments:
- 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.
The term symmetric data object
is defined on intro_shmem(3).
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.
intro_shmem(3)
Table of Contents
« Return to documentation listing
|