Упорядочение атомарного чтения с неатомным чтением - PullRequest
0 голосов
/ 07 июня 2018

Предположим, у меня есть атомная переменная 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; 
}

Спасибо

PS Основное отличие от следующего вопроса Переупорядочение атомных считываний заключается в том, что первая переменная считается не атомарной.

...