A.12 使用 atomic 指令

下面的示例避免争用条件 ( x 元素的 同时更新由多个线程的) 使用 atomic 指令 (在第 19 页) 的第2.6.4部分 :

#pragma omp parallel for shared(x, y, index, n)
    for (i=0; i<n; i++) 
    {
        #pragma omp atomic
            x[index[i]] += work1(i);
        y[i] += work2(i);
    }

使用 atomic 指令的优点在此示例中为它允许 x 的两个不同元素更新并行生成。 如果使用了 critical 指令 (在第 18 页) 的第2.6.2部分 ,则为 x 元素的 所有更新将按顺序执行 (尽管不以任何确保的顺序)。

请注意 atomic 指令仅适用于后的 C 或 C++ 语句。 因此, y 的 元素不在此示例中更新基本。