c-我可以假设OpenMP共享变量是原子读写的吗



例如,假设我有一个变量,底层处理器无法在一条指令中访问该变量(例如,32位体系结构上的64位整数)。

// let x, y, z of the same integral type of size > architecture
#pragma omp parallel shared(x), private(y,z)
  y = ...;
  z = ...;
  if (x == y)
    x = z;

虽然if语句和实际赋值之间可能存在竞争,但x的一半能否在上下文切换之前读取,另一半能否在切换之后读取?还是保证对共享变量的读写访问总是以原子方式进行?我在标准中找不到任何关于这一点的声明。

否和否。此代码将导致资源竞争。

相关内容

最新更新