16

我看到这可能有问题我必须明确调用原子加载/存储吗?.

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

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个选项?有什么明显的好处?
  2. 在处理原子时,最好使用更详细的 load()/store() 而不是可能令人困惑的 assignment(=),这可能意味着取决于 LHS 还是 RHS 是原子的。

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

4

1 回答 1

13

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

就个人而言,我更喜欢明确地说,load并且store总是。我认为这是更好的做法,并迫使你记住你正在处理一个原子。

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

于 2016-01-21T05:23:29.133 回答