例如,假设我有一个变量,底层处理器无法在一条指令中访问该变量(例如,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
的一半能否在上下文切换之前读取,另一半能否在切换之后读取?还是保证对共享变量的读写访问总是以原子方式进行?我在标准中找不到任何关于这一点的声明。
否和否。此代码将导致资源竞争。