Самый быстрый способ выполнить атомарное чтение в этой *очень* специфической ситуации?C++

Программы на C++. Форум разработчиков
Anonymous
Самый быстрый способ выполнить атомарное чтение в этой *очень* специфической ситуации?

Сообщение Anonymous »

Фон
Оказывается, все(?) компиляторы рассматривают std::atomic::load(std::memory_order_relaxed) как изменчивую загрузку (через __iso_voluty_load64 и т. д.).
Они вообще не оптимизируют и не меняют порядок. Даже отбрасывание загруженного значения все равно генерирует инструкцию загрузки, поскольку компиляторы рассматривают ее так, как будто она может иметь побочные эффекты.

Итак, расслабленные нагрузки неоптимальны. С учетом сказанного...
Вопрос (x86)
Предположим, что p указывает на монотонно увеличивающийся 8-байтовый счетчик в общей памяти, который записывается только вне моего процесса . Моя программа читает только с этого адреса.

Я хочу считать этот счетчик таким образом, чтобы:
[*]
Нагрузки являются атомарными (без разрывов)
[*]
Для этого счетчика порядок сохраняется (так что x = *p; y = *p; подразумевает x

Вернуться в «C++»