次の方法で共有


A.5 critical ディレクティブの使用

次の例には、複数の critical ディレクティブ (18 ページの「2.6.2 critical コンストラクト」) が含まれています。この例では、タスクを取得して実行するキュー モデルが示されています。複数のスレッドがキューから同じタスクを取得するのを防ぐため、キューから削除する操作を critical セクション内に含める必要があります。この例では 2 つのキューを独立させるため、それぞれを xaxisyaxis という異なる名前の 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);
}