赋值等效于std :: atomic <bool>的加载/存储

BGR*_*BGR 5 c++ concurrency c++11 stdatomic

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

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

std::atomic<bool> b(false);
bool x = b;
Run Code Online (Sandbox Code Playgroud)

与...一样

std::atomic<bool> b(false);
bool x = b.load();
Run Code Online (Sandbox Code Playgroud)

std::atomic<bool> b(false);
b = true;
Run Code Online (Sandbox Code Playgroud)

与...一样

std::atomic<bool> b(false);
b.store(true);
Run Code Online (Sandbox Code Playgroud)

如果情况确实如此:

  1. 为什么有两种选择?有什么明显的好处?
  2. 在处理原子时更喜欢更详细的load()/ store()而不是潜在的混淆赋值(=),这可能意味着取决于LHS或RHS是否为原子,这是一种好的做法.

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

pad*_*ddy 5

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

就个人而言,我更喜欢明确load而且store始终.我认为这是更好的练习并迫使你记住你正在处理一个原子.

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

  • 此外,使用load()强制复制到另一个变量.使用赋值使得代码经常在不需要时反复从原子重载. (2认同)
  • Zan Lynx 一遍又一遍地从 atomic 重新加载是什么意思?我不明白 (2认同)