使用非原子读取

时间:2018-06-07 02:28:26

标签: c++ multithreading concurrency atomic

假设我有一个原子变量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的主要区别在于假设第一个变量是非原子的。

0 个答案:

没有答案