显式原子加载/存储与通常的 operator= 和 operator T 有啥区别?
Posted
技术标签:
【中文标题】显式原子加载/存储与通常的 operator= 和 operator T 有啥区别?【英文标题】:What is the difference between explicit atomic load/store and usual operator= and operator T?显式原子加载/存储与通常的 operator= 和 operator T 有什么区别? 【发布时间】:2014-11-02 14:59:47 【问题描述】:考虑这两种变体:
std::atomic<int> a;
a = 1;
int b = a;
和
std::atomic<int> a;
a.store(1);
int b = a.load();
我从文档中看到第二个是完全原子的,但是我不明白什么时候应该使用哪个以及详细的区别是什么。
【问题讨论】:
【参考方案1】:这两个例子是等价的; operator=
和 operator T
被定义为分别等效于调用 store
和 load
,使用 memory_order
参数的默认值。
如果您对默认值memory_order_seq_cst
感到满意,以便每次访问都充当内存围栏,那么请使用您认为更好的那个。如果要指定不同的值,则需要使用函数,因为运算符不能接受第二个参数。
【讨论】:
值得注意的是,memory_order_seq_cst
是最强的内存排序。除了在不需要完全顺序一致性的情况下提高性能外,没有理由指定不同的。
我更喜欢load
/ store
,因为它表明变量是原子变量,它增强了代码的可读性!以上是关于显式原子加载/存储与通常的 operator= 和 operator T 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
operator== 和 boost::detail::atomic_count 中的显式构造函数?