インテル® C++ コンパイラー 15.0 ユーザー・リファレンス・ガイド
チーム内のすべてのスレッドが到着するまで各スレッドが待機しなければならないコード位置を指定します。
#pragma omp barrier |
なし
このプラグマに到達したすべてのスレッドは、チーム内のすべてのスレッドが到着するまで待機する必要があります。 チーム内の最後のスレッドが到着した後、すべてのスレッドは解放され、囲まれた並列領域の実行を続けます。
囲まれた並列領域のコードは、すべてのスレッドがプラグマに到達するか、どのスレッドもプラグマに到達しないようにする必要があります。
次の例は、このプラグマを使用して、2 つ目のループを実行する前にすべてのスレッドが 1 つ目のループの実行を完了することを保証する方法を示します。
#include <omp.h> void work1(int k) { // large amount of work } void work2(int k) { // large amount of work that must all happen after work1 is finished } 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; }