std :: atomic - это новая функция, представленная в C ++ 11, но я не могу найти много руководств о том, как ее правильно использовать. Так является ли следующая практика распространенной и эффективной?
Я использовал один из способов: у нас есть буфер и я хочу использовать CAS для некоторых байтов, поэтому я сделал следующее:
uint8_t *buf = ....
auto ptr = reinterpret_cast<std::atomic<uint8_t>*>(&buf[index]);
uint8_t oldValue, newValue;
do {
oldValue = ptr->load();
// Do some computation and calculate the newValue;
newValue = f(oldValue);
} while (!ptr->compare_exchange_strong(oldValue, newValue));
Итак, мои вопросы:
РЕДАКТИРОВАТЬ: если эти вопросы зависят от процессора / архитектуры, то каков вывод для процессоров x86 / x64?