XL Fortran for AIX V8.1.1

ランゲージ・リファレンス

omp_set_lock

omp_set_lock サブルーチンは、指定したロックが使用可能になるまで、呼び出し側スレッドによる次の命令の実行を強制的に待機させます。ロックが使用可能になると、呼び出し側スレッドにその所有権が与えられます。

注:
まだ初期化されていないロック変数を指定してこのルーチンを呼び出すと、その結果は未定義です。また、ロックを所有しているスレッドが、 omp_set_lock 呼び出しを発行してこれを再びロックしようとすると、デッドロックが発生します。

引き数タイプおよび属性

omp_lock_kind

      USE omp_lib
      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 を更新しているようにします。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]