Упорядочение памяти или операция чтения-изменения-записи с (только чтение / запись) только по памяти
Выполнение следующего является атомарной операцией 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. Он ничего не получает, поэтому порядок заказа для загружаемой части "ослаблен"