繁体   English   中英

std :: atomic变量应该使用“normal”语法还是“load”和“store”?

[英]Should std::atomic variables use “normal” syntax or “load” and “store”?

如果我有一个原子变量,例如,

std::atomic<int> x;

我想对它执行读写操作,我可以使用“普通”语法,例如,

std::cout << x;       // read from x
x = 5;                // write to x

我也可以使用显式loadstore成员函数:

std::cout << x.load();       // read from x
x.store(5);                  // write to x

我看过Andrei Alexandrescu和Anthony Williams等人的建议只使用explict loadstore形式,大概是因为“正常”形式并不强调变量是原子的。 这似乎就像一种匈牙利符号。 是否有关于在读写原子时使用的语法的新兴惯例?

有几个操作被重载为“按你的想法做”,并通过顺序一致的内存排序来完成这项操作。 所以:

  • int n = x; int n = x.load(std::memory_order_seq_cst) ,并且
  • x = 1x.store(1, std::memory_order_seq_cst)

但是,如果您想要任何类型的宽松内存排序,则需要使用显式成员函数,例如int n = x.load(std::memory_order_acquire)

我们的想法是,“自然”外观代码通常是正确的(回想一下“顺序一致的数据竞争程序”执行模型),但风险更大,更积极的操作是可用的 - 它们只需要明确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM