Понимание последовательного ограждения согласованности в C++C++

Программы на C++. Форум разработчиков
Anonymous
Понимание последовательного ограждения согласованности в C++

Сообщение Anonymous »

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

Подробнее здесь: https://stackoverflow.com/questions/755 ... fence-in-c

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