假设我有一个原子变量aa
和一个非原子变量na
。是否可以确保在aa
之后读取原子变量na
?
通常,获取内存栅栏可防止重新排序负载。在这种情况下,它还能确保订购吗?
如果没有,是否有可能在没有na
原子的情况下实现这种排序,并且没有为读者使用强大的内存栅栏(即顺序一致性),这显然更加广泛?
int na{0};
atomic<int> aa{0};
void thread1(){
int l1 = na;
std::signal_memory_fence(std::memory_order_acquire);
int l2 = aa;
assert( l2==0 || l1==1 ); //does this hold?
//if reading from aa observed the latest value 1, reading from na cannot have an earlier value
}
void thread2(){
aa.store(1, std::memory_order_seq_cst);
na = 1;
}
由于
P.S。与以下问题Re-ordering Atomic Reads的主要区别在于假设第一个变量是非原子的。