我看到这可能在问题 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);
如果确实如此,那么:
- 为什么有两个选项?明显的好处是什么?
- 在处理原子时,更喜欢更冗长的 load()/store() 而不是可能令人困惑的赋值 (=) 是否是一种好习惯,这可能意味着取决于 LHS 或 RHS 是原子的。
注意 我已经知道这两个变量不能是 std::atomic 即 LHS 和 RHS,因为不可能在一条指令中以原子方式读写。
最佳答案
是的,它们是一样的。我认为提供重载运算符的原因是为了方便。更不用说更容易将现有代码转换为使用原子。
就个人而言,我更喜欢始终明确地使用 load
和 store
。我认为这是更好的练习,它会迫使您记住您正在与原子打交道。
此外,这些函数允许您指定其他内存顺序,这对于重载运算符版本是不可能的。
关于c++ - 赋值是否等同于 std::atomic<bool> 的加载/存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34915926/