目的
omp_set_lock サブルーチンは、指定したロックが使用可能になるまで、 呼び出し側スレッドによる次の命令の実行を強制的に待機させます。 ロックが使用可能になると、呼び出し側スレッドにその所有権が与えられます。
初期化されていないロック変数を指定してこのルーチンを呼び出した場合、その呼び出しの結果は不確定です。 ロックを所有しているスレッドが、omp_set_lock の呼び出しを発行してこれを再びロックしようとすると、 スレッドはデッドロックを発生させます。
クラス
サブルーチン
引き数の型と属性
結果の値と属性
なし
結果の値
なし
例
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)
この例では、共用変数 X の更新時に競合状態を避けるために、ロック変数 LCK_X が使用されています。
X を更新するたびに、更新前にロックを設定し、更新後に設定解除することによって、
1 時点で必ず 1 つのスレッドのみが X を更新しているようにします。