Purpose
The omp_set_lock subroutine forces the calling thread to wait until the specified lock is available before executing subsequent instructions. The calling thread is given ownership of the lock when it becomes available.
If you call this routine with an uninitialized lock variable, the result of the call is undefined. If a thread that owns a lock tries to lock it again by issuing a call to omp_set_lock, the thread produces a deadlock.
Class
Subroutine.
Argument Type and Attributes
Result Type and Attributes
None.
Result Value
None.
Examples
USE omp_lib INTEGER A(100) INTEGER(kind=omp_lock_kind) LCK_X CALL omp_init_lock (LCK_X) !$OMP PARALLEL PRIVATE (I), SHARED (A, X) !$OMP DO DO I = 3, 100 A(I) = I * 10 CALL omp_set_lock (LCK_X) X = X + A(I) CALL omp_unset_lock (LCK_X) END DO !$OMP END DO !$OMP END PARALLEL CALL omp_destroy_lock (LCK_X)
In this example, the lock variable LCK_X is used to avoid race conditions
when updating the shared variable X. By setting the lock before each
update to X and unsetting it after the update, you ensure that only one thread
is updating X at a given time.