Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
考虑以下两种变体:
std::atomic<int> a; a = 1; int b = a;
和
std::atomic<int> a; a.store(1); int b = a.load();
我从文档中看到第二个是完全原子的,但是我不明白什么时候应该使用哪个以及详细的区别是什么。
这两个例子是等价的;operator=和operator T被定义为等效于调用store和load分别使用memory_order参数的默认值。
operator=
operator T
store
load
memory_order
如果您对该默认值感到满意,memory_order_seq_cst, 以便每次访问都充当内存围栏,那么请使用对您来说更好的那个。如果要指定不同的值,则需要使用函数,因为运算符不能接受第二个参数。
memory_order_seq_cst