Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我可以假设OpenMP共享变量是原子读写的吗?_C_Openmp_Shared Memory - Fatal编程技术网

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

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

例如,假设我有一个无法在一条指令中被底层处理器访问的变量(例如,32位体系结构中的64位整数)


虽然
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;