使用关键指令的A.5
下面的示例包含多个 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);
}