Должны быть парные атомные заборы - PullRequest
1 голос
/ 20 октября 2019

Я видел разговор атомное <> оружие и другие разговоры об атомике, но один вопрос так и не был решен.
Должен ли я сопоставлять релиз с приобретением во всех исполнениях функции?

Допустим ли этот код?
Выпуск происходит только при некоторых выполнениях foo.

atomic<int> atom;

int foo( int b ) {
    auto loaded_a = atom.load( memory_order_acquire );
    auto a = loaded_a;
    if( a < b ) {
        a++;
        a.compare_exchange_strong( loaded_a, a, memory_order_release, memory_order_relaxed ); 
    }
    return a;
}

В этой функции foo () обновляет атом, только если текущий поток былэто должно увеличить его. В противном случае атом не обновляется.

...