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

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

Сообщение Anonymous »

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

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

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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