インテル® C++ コンパイラー 15.0 ユーザー・リファレンス・ガイド

omp critical

一度に 1 つのスレッドのみアクセスできるコードブロックを指定します。

構文

#pragma omp critical [name]

structured-block

引数

name

クリティカル・セクション名

説明

omp critical プラグマが使用されると、スレッドは、チーム内のほかのスレッドが同じ名前のクリティカル・セクションを実行しなくなるまで、クリティカル・セクションの入口で待機します。名前のないクリティカル・セクションはすべて同じ無指定の名前であるとみなされます。

クリティカル・セクション名は、プログラムのグローバル要素です。

次の例は、キューからタスクを削除するキューイング・モデルを示します。 複数のスレッドがキューから同じタスクを削除しないように、タスクを削除する操作は critical セクションに配置します。 この例には 2 つの独立したキューがあるため、プラグマを使用してそれぞれのキューに xaxisyaxis という名前を付けて保護しています。

#include <omp.h>
int dequeue(work_queue *a);
void work(int i, work_queue *a);

void critical_example(work_queue *x, work_queue *y) {
  int ix_next, iy_next;

  #pragma omp parallel shared(x, y) private(ix_next, iy_next) {
    #pragma omp critical (xaxis)
    ix_next = dequeue(x);
    work(ix_next, x);

    #pragma omp critical (yaxis)
    iy_next = dequeue(y);
    work(iy_next, y);
  }
}

このヘルプトピックについてのフィードバックを送信