A.5 Usando a diretiva critical
O exemplo a seguir inclui vários critical diretivas (seção 2.6.2 na página 18). O exemplo ilustra um modelo de enfileiramento de mensagens em que uma tarefa é desenfileirada e trabalhada. Para proteção contra vários threads desenfileiramento a mesma tarefa, a operação de dequeuing deve estar em um critical seção. Como as duas filas neste exemplo são independentes, elas são protegidas por critical diretivas com nomes diferentes, xaxis e 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);
}