c++ - 赋值是否等同于 std::atomic<bool> 的加载/存储

标签 c++ c++11 concurrency stdatomic

我看到这可能在问题 Must I call atomic load/store explicitly? 中得到了回答.

因此,为了清楚起见,我将简明扼要地重申我的问题,希望 future 的读者能明白这一点。

std::atomic<bool> b(false);
bool x = b;

相同
std::atomic<bool> b(false);
bool x = b.load();

std::atomic<bool> b(false);
b = true;

相同
std::atomic<bool> b(false);
b.store(true);

如果确实如此,那么:

  1. 为什么有两个选项?明显的好处是什么?
  2. 在处理原子时,更喜欢更冗长的 load()/store() 而不是可能令人困惑的赋值 (=) 是否是一种好习惯,这可能意味着取决于 LHS 或 RHS 是原子的。

注意 我已经知道这两个变量不能是 std::atomic 即 LHS 和 RHS,因为不可能在一条指令中以原子方式读写。

最佳答案

是的,它们是一样的。我认为提供重载运算符的原因是为了方便。更不用说更容易将现有代码转换为使用原子。

就个人而言,我更喜欢始终明确地使用 loadstore。我认为这是更好的练习,它会迫使您记住您正在与原子打交道。

此外,这些函数允许您指定其他内存顺序,这对于重载运算符版本是不可能的。

关于c++ - 赋值是否等同于 std::atomic<bool> 的加载/存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34915926/

相关文章:

c++ - 函数重载、继承和隐式构造函数 : weird priority

c++ - 为什么 decltype(a, b) 被评估为引用?

c# - Java 中有类似 C# Task 的东西吗?

c++ - 代表模板类型的名称应该是单个字符吗?

c++ - 错误 : too many initializers for a struct

c - 可以同时从多个进程打开 tty 吗?

mysql - 重叠日期时间的最大数量,有多个开始和结束时间

C++:为什么它不调用析构函数?

c++ - 声明一个 int 变量

c++ - 如何在 OpenGL C++ 中旋转旋转轴?