Если я не ошибаюсь, из cppreference, std::memory_order_seq_cst "операция" эквивалентна:
- операции получения плюс один общий порядок, когда операция является "загрузкой".
- операция выпуска плюс один общий порядок, когда операция — «сохранение».
- операция acq-rel плюс один общий порядок, когда операция «чтение-изменение-запись».
- ограждение приобретения плюс один общий заказ.
- ограничение выпуска плюс один общий заказ.
- ограничение acq-rel плюс один общий заказ.
Насколько мне известно, если это случай 1 (получение ограждения), компиляторы смогут свободно перемещать любую операцию записи сверху ограждения вниз. Аналогично, если это случай 2 (освободить ограждение), компиляторы смогут свободно перемещать любую операцию чтения из-под ограждения вверх. Наконец, если это случай 3 (ограждение acq-rel), компиляторам будет запрещено перемещать какие-либо инструкции через ограждение. Это верно?
Я все еще в замешательстве. Вышеуказанные утверждения могут быть неверными. Поправьте меня, пожалуйста, где я ошибаюсь.
Подробнее здесь: https://stackoverflow.com/questions/755 ... fence-in-c
Мобильная версия