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

omp critical

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

構文

#pragma omp critical [name]

structured-block

引数

name

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

説明

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

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

例

次の例は、キューからタスクを削除するキューイング・モデルを示します。 複数のスレッドがキューから同じタスクを削除しないように、タスクを削除する操作はクリティカル・セクションに配置します。

この例には 2 つの独立したキューがあるため、宣言子を使用してそれぞれのキューに xaxis と yaxis という名前を付けて保護しています。

#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);
 }
}


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