Я видел разговор атомное <> оружие и другие разговоры об атомике, но один вопрос так и не был решен.
Должен ли я сопоставлять релиз с приобретением во всех исполнениях функции?
Допустим ли этот код?
Выпуск происходит только при некоторых выполнениях 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 () обновляет атом, только если текущий поток былэто должно увеличить его. В противном случае атом не обновляется.