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
}