次の方法で共有


3.2 ロック関数

このセクションでは、同期用に使用されるロックを操作する関数について説明します。

次の関数では、ロック変数は omp_lock_t 型であることが要求されます。この変数は、これらの関数からのみアクセスされる必要があります。すべてのロック関数が、omp_lock_t 型へのポインタを持つ引数を要求します。

  • omp_init_lock 関数は、単純ロックを初期化します。

  • omp_destroy_lock 関数は単純ロックを削除します。

  • omp_set_lock 関数は、単純ロックが使用可能になるまで待機します。

  • omp_unset_lock 関数は単純ロックを解放します。

  • omp_test_lock 関数は単純ロックをテストします。

次の関数では、ロック変数は omp_nest_lock_t 型であることが要求されます。この変数は、これらの関数からのみアクセスされる必要があります。すべての入れ子にできるロック関数が、omp_nest_lock_t 型へのポインタを持つ引数を要求します。

  • omp_init_nest_lock 関数は入れ子にできるロックを初期化します。

  • omp_destroy_nest_lock 関数は入れ子にできるロックを削除します。

  • omp_set_nest_lock 関数は入れ子にできるロックが使用可能になるまで待機します。

  • omp_unset_nest_lock 関数は入れ子にできるロックを解放します。

  • omp_test_nest_lock 関数は入れ子にできるロックをテストします。

OpenMP ロック関数は、ロック変数にアクセスして、常にそのロック変数の最も新しい値を読み取り更新します。したがって、ロック変数の値が異なるスレッド間で一致するように、OpenMP プログラムに明示的な flush ディレクティブをインクルードする必要はありません。ただし、他の変数の値と一致させるために flush ディレクティブが必要になる場合もあります。