gpt4 book ai didi

c++ - std::atomic 变量应该使用 "normal"语法还是 "load"和 "store"?

转载 作者:太空狗 更新时间:2023-10-29 19:52:35 26 4
gpt4 key购买 nike

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

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 这样的人建议只使用明确的 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)

这个想法是看起来“自然”的代码通常是正确的(回想一下“无数据争用程序的顺序一致”执行模型),但是风险更高、更激进的操作是可用的——它们只需要是显式的。

关于c++ - std::atomic 变量应该使用 "normal"语法还是 "load"和 "store"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23706248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com