インテル® C++ コンパイラー 15.0 ユーザー・リファレンス・ガイド
一度に 1 つのスレッドのみアクセスできるコードブロックを指定します。
#pragma omp critical [name] |
structured-block
name |
クリティカル・セクション名 |
omp critical プラグマが使用されると、スレッドは、チーム内のほかのスレッドが同じ名前のクリティカル・セクションを実行しなくなるまで、クリティカル・セクションの入口で待機します。名前のないクリティカル・セクションはすべて同じ無指定の名前であるとみなされます。
クリティカル・セクション名は、プログラムのグローバル要素です。
次の例は、キューからタスクを削除するキューイング・モデルを示します。 複数のスレッドがキューから同じタスクを削除しないように、タスクを削除する操作は critical セクションに配置します。 この例には 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); } } |