У меня есть пара int32 без знака
std::atomic<u32> _start;
std::atomic<u32> _end;
Иногда я хочу установить начало или конец с обменом сравнением, поэтому мне не нужны ложные сбои, которые могут быть вызваны использованием CAS на всей 64-битной паре. Я просто хочу использовать 32-битный CAS.
_end.compare_exchange_strong(old_end, new_end);
Теперь я мог получить как начало, так и конец как одно атомарное 64-битное чтение. Или два отдельных 32-битных чтения. Разве не было бы быстрее выполнить одну 64-битную атомарную выборку (с компилятором, добавляющим соответствующий забор памяти), а не два отдельных 32-битных чтения с двумя зазорами памяти (или компилятор оптимизирует это отдельно?)
Если так, как бы это сделать в c ++ 11?