C 我可以假设OpenMP共享变量是原子读写的吗?
例如,假设我有一个无法在一条指令中被底层处理器访问的变量(例如,32位体系结构中的64位整数)C 我可以假设OpenMP共享变量是原子读写的吗?,c,openmp,shared-memory,C,Openmp,Shared Memory,例如,假设我有一个无法在一条指令中被底层处理器访问的变量(例如,32位体系结构中的64位整数) 虽然if语句和实际赋值之间可能存在争用,但是x的一半可以在上下文切换之前读取,另一半可以在上下文切换之后读取吗?或者可以保证对共享变量的读写访问总是以原子方式进行?我在标准中找不到与此相关的任何声明。否。此代码将导致资源竞争。否,这是一个坏主意…@Mystical:因此,如果这是一个坏主意,这将意味着标准不能保证这里的原子性?这是正确的。因此,您必须手动保护它们。如何用“否”回答这两个问题?我认为它们
虽然
if
语句和实际赋值之间可能存在争用,但是x
的一半可以在上下文切换之前读取,另一半可以在上下文切换之后读取吗?或者可以保证对共享变量的读写访问总是以原子方式进行?我在标准中找不到与此相关的任何声明。否。此代码将导致资源竞争。否,这是一个坏主意…@Mystical:因此,如果这是一个坏主意,这将意味着标准不能保证这里的原子性?这是正确的。因此,您必须手动保护它们。如何用“否”回答这两个问题?我认为它们是相互排斥的。你们愿意详细说明一下吗?那个是意义的增强。)我认为这样的操作并不是原子的,正如我从汇编中记得的那个样
// 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;