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

标签 c openmp shared-memory

例如,假设我有一个变量无法在一条指令中被底层处理器访问(例如 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/

相关文章:

c - 在 C 中处理 BMP 文件中的填充

c - 在结构上打印指向 void 的指针时出现问题

c++ - OpenMP 代码中止

sql-server-2000 - 使用共享内存和 jtds 驱动程序连接到 SQL Server

c - 当 parent 和 child 都写入标准输出时,输出没有交错

c - 通过套接字读/写C编程

c++ - 如何在每个例程OpenMP中处理子数组

c++ - 使用 openmp 并行 for_each

linux - 在 Linux 中共享可执行内存页?

c - 如何将多个结构实例存储在共享内存中?