我可以假设OpenMP共享变量是原子读取和写入的吗?

时间:2012-02-14 22:05:25

标签: c openmp shared-memory

例如,假设我在一条指令中有一个底层处理器无法访问的变量(例如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的一半,之后是另一半吗?或者是否保证对共享变量的读写访问总是以原子方式进行?我在标准中找不到任何关于此的陈述。

1 个答案:

答案 0 :(得分:0)

不,不。此代码将导致资源竞争。