Понимание последовательного ограждения согласованности в 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
Ответить

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

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

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

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

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