次の方法で共有


2.6.3 barrier ディレクティブ

barrier ディレクティブは、チーム内のすべてのスレッドの同期をとります。チーム内の各スレッドは、バリアを検出すると、他のすべてのスレッドがこのポイントに到達するまで待機します。barrier ディレクティブの構文は次のとおりです。

#pragma omp barrier new-line

チーム内のすべてのスレッドがバリアを検出したら、チーム内の各スレッドは、barrier ディレクティブの後のステートメントの並列実行を開始します。barrier ディレクティブはその構文に C 言語ステートメントを持たないため、プログラム内に C 言語ステートメントを配置する場合にはいくつかの制限が生じます。正しい文法については、「C. OpenMP C と C++ の文法」を参照してください。これらの制限を次の例に示します。

/* ERROR - The barrier directive cannot be the immediate
*          substatement of an if statement
*/
if (x!=0)
   #pragma omp barrier
...

/* OK - The barrier directive is enclosed in a
*      compound statement.
*/
if (x!=0) {
   #pragma omp barrier
}