例如,假设我有一个变量无法在一条指令中被底层处理器访问(例如 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
,然后再读取另一半?还是保证对共享变量的读写访问始终以原子方式发生?我在标准中找不到关于此的任何声明。
最佳答案
没有也没有。此代码将导致资源竞争。
关于我可以假设 OpenMP 共享变量是原子读写的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9284888/