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