Упорядочение памяти или операция чтения-изменения-записи с (только чтение / запись) только по памяти

Выполнение следующего является атомарной операцией RMW

auto value = atomic.fetch_or(value, order);

когда order является std::memory_order_acq_rel мы знаем, что загрузка предыдущего значения в элементарном режиме получит все операции освобождения, которые могли произойти ранее на том же элементарном уровне. И запись освободит записи текущего потока для потоков, которые получают ту же атомарную переменную. То же самое с std::memory_order_seq_cst,

Но каково ожидаемое поведение части записи операции RMW относительно упорядочения памяти при использовании std::memory_order_acquire? Точно так же, каково ожидаемое поведение использования std::memory_order_release для стороны нагрузки операции RMW?

1 ответ

Решение

С помощью std::memory_order_acquire на атомном RMW - операция только для приобретения.
Поскольку он ничего не "освобождает", он не может быть частью отношения синхронизации с другой атомарной операцией получения (с той же атомарной переменной), которая происходит позже.
Таким образом, эквивалент для части магазина std::memory_order_relaxed

Аналогичные рассуждения об использовании std::memory_order_release на RMW. Он ничего не получает, поэтому порядок заказа для загружаемой части "ослаблен"

Другие вопросы по тегам