2
我一直在问的f和g这两个函数之间的区别:atomic.store和atomic_thread_fence之间有什么区别?
atomic<int> var(1);
int a = 1;
void f() {
a=123;
var.store(0, std::memory_order_release);
}
void g() {
a=123;
std::atomic_thread_fence(std::memory_order_release);
var.store(0, std::memory_order_relaxed);
}
在我看来,他们有同样的效果,因为如果其他线程读取var=0
我们可以肯定的是a=123
,对不对?
的例子是过于简单化。商店和装载仅影响一个内存位置,一个围栏影响所有内存位置。同步加载/存储对在某种意义上说是更经济更谨慎的同步方式。 –
@KerrekSB是的,我认为在这种简单的情况下,它们应该具有相同的效果。 –