インテル® C++ コンパイラー 14.0 ユーザー・リファレンス・ガイド
チーム内のすべてのスレッドが到着するまで各スレッドが待機しなければならないコード位置を指定します。
このプラグマに到達したすべてのスレッドは、チーム内のすべてのスレッドが到着するまで待機する必要があります。 チーム内の最後のスレッドが到着した後、すべてのスレッドは解放され、囲まれた並列領域の実行を続けます。
囲まれた並列領域のコードは、すべてのスレッドがプラグマに到達するか、どのスレッドもプラグマに到達しないようにする必要があります。
次の例は、このプラグマを使用して、2 つ目のループを実行する前にすべてのスレッドが 1 つ目のループの実行を完了することを保証する方法を示します。
#include <omp.h>
void work1(int k)
{
// 大きな作業
}
void work2(int k)
{
// work1 の完了後に実行しなければならない大きな作業
}
int main()
{
int n=1000000;
#pragma omp parallel private(i) shared(n)
{
#pragma omp for
for (i=0; i<n; i++)
work1(i);
#pragma omp barrier
#pragma omp for
for (i=0; i<n; i++)
work2(i);
}
return 0;
}