Предположим, у меня есть атомная переменная 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 Основное отличие от следующего вопроса Переупорядочение атомных считываний заключается в том, что первая переменная считается не атомарной.