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