A.5 使用 critical 指令

下面的示例包含多个 critical 指令 (在第 18 页) 的第2.6.2部分 。 示例阐释任务取消并使用的一个队列模型。 若要防止取消同一任务的多个线程,取消排队的操作必须在 critical 部分。 由于本示例中的两个队列都是独立的,它们是使用其他名称、 X 轴Y 轴的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);
}