Udostępnij za pośrednictwem


A.5 za pomocą dyrektywy krytyczne

Poniższy przykład zawiera kilka critical dyrektyw (sekcji 2.6.2 na stronie 18).W przykładzie zilustrowano modelu usługi kolejkowania wiadomości, dequeued i pracy na zadania.Aby zabezpieczyć się przed wieloma wątkami usuwania tego samego zadania, należy w operacji dequeuing critical sekcji.Ponieważ dwie kolejki w tym przykładzie są niezależne, są chronione przez critical dyrektyw pod różnymi nazwami, xaxis i yaxis.

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