Поделиться через


A.5 Использование директивы critical

Следующий пример включает несколько critical директивы (Раздел 2.6.2 на странице 18). Примере иллюстрируется модель очереди, в которой задача выведенн из очередиа и работать над. Защититься от нескольких потоков выведя из очереди той же задачи, выведя из очереди, операция должна иметь a critical раздел. Поскольку 2 очереди в этом примере не зависят друг от друга, то они защищены by critical директивы с различными именами xaxis и Y-osь.

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