std :: atomic рассматривает пару атомарных int32 как один атомарный int64?

У меня есть пара 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?

5
задан Eloff 14 January 2012 в 05:53
поделиться