16

考虑以下两种变体:

std::atomic<int> a;
a = 1;
int b = a;

std::atomic<int> a;
a.store(1);
int b = a.load();

我从文档中看到第二个是完全原子的,但是我不明白什么时候应该使用哪个以及详细的区别是什么。

4

1 回答 1

20

这两个例子是等价的;operator=operator T被定义为等效于调用storeload分别使用memory_order参数的默认值。

如果您对该默认值感到满意,memory_order_seq_cst, 以便每次访问都充当内存围栏,那么请使用对您来说更好的那个。如果要指定不同的值,则需要使用函数,因为运算符不能接受第二个参数。

于 2014-09-09T09:00:13.540 回答