A.5 critical ディレクティブの使用
次の例には、複数の critical ディレクティブ (18 ページの「2.6.2 critical コンストラクト」) が含まれています。この例では、タスクを取得して実行するキュー モデルが示されています。複数のスレッドがキューから同じタスクを取得するのを防ぐため、キューから削除する操作を critical セクション内に含める必要があります。この例では 2 つのキューを独立させるため、それぞれを xaxis と yaxis という異なる名前の critical ディレクティブで保護しています。
#pragma omp parallel shared(x, y) private(x_next, y_next)
{
#pragma omp critical ( xaxis )
x_next = dequeue(x);
work(x_next);
#pragma omp critical ( yaxis )
y_next = dequeue(y);
work(y_next);
}