c++ - 对原子变量的非原子操作,反之亦然

标签 c++ c atomic

<分区>

给定以下代码:

static int x;

static void f() {
  for (int i = 0; i < 100; ++i)
    atomic_fetch_add(&x, 3);
}

进一步,假设 f 被两个线程同时调用。 C/C++ 内存模型是否保证在所有硬件平台上结果始终为 600

如果我把它改成下面的呢?结果是否仍然保证在所有硬件平台上都是 600

static atomic_int a_x;

static void f() {
  for (int i = 0; i < 100; ++i)
    a_x += 3;
}

或者结果无法保证,我不应该将原子操作与非原子类型混合使用,反之亦然?

PS:我在这里使用了 int 类型,但我的问题适用于任何类型 T_Atomic T

最佳答案

如果你想对非原子变量使用原子操作,你可以使用std::atomic_ref (C++20)。你可以看一个例子 here .

你的第二个例子应该没​​问题,因为 a_x 是原子的 memory_order_seq_cst 内存模型并且 +=defined因为它是一个原子操作。

关于c++ - 对原子变量的非原子操作,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66066605/

相关文章:

c++ - 使用 C++ 进行图像处理还是继续使用 OpenCV?

c++ - 使用文件内容作为硬编码字符串

c - 不使用 [ ] C 语言将值扫描到矩阵中

c++ - 引用 std::atomic<bool> 的已删除函数错误

swift 3 : atomic_compare_exchange_strong

c++ - 从可用数字中形成最大数字?

c++ - 计算 C 中 NSDate 之间的秒数

c - 从文件中单独读取单词

c - 在不更改代码的情况下使用 gcc 的功能多版本控制是否可行?

c++ - 这个 C++ AtomicInt 实现正确吗?