Почему хранилище std::atomic использует XCHG для последовательной согласованности
В контексте std::atomic для архитектур x86 и x86_64 операция сохранения с последовательной согласованностью (std::memory_order_seq_cst) использует XCHG вместо простого сохранения с барьером памяти в качестве метода достижения семантики последовательного выпуска.
Последовательная согласованность и xchg
Последовательная согласованность требует, чтобы все операции с памятью выполнялись в некотором последовательном порядке, и этот порядок одинаков для всех потоков. XCHG, инструкция x86, которая атомарно обменивает значения двух операндов, по своей сути удовлетворяет этому требованию последовательной согласованности. Используя XCHG для выполнения операции записи, std::atomic гарантирует, что хранилище станет глобально видимым для всех потоков в определенной точке порядка выполнения, предотвращая переупорядочение последующих операций.
mov- store mfence против XCHG
Хотя простое mov-store, за которым следует ограничение памяти (например, mfence), теоретически может обеспечить семантику выпуска, этого недостаточно для операций хранилища с последовательным выпуском. MFENCE, инструкция ограничения памяти, которая устанавливает барьер памяти и гарантирует, что предыдущие операции записи будут зафиксированы в памяти, прежде чем продолжить. Однако это не предотвращает переупорядочение последующих операций загрузки перед хранилищем выпуска.
Аспекты производительности
Выбор между mov-store mfence и XCHG для последовательного выпуска операции хранилища требуют компромисса в производительности.
Детали реализации
На практике конкретная реализация хранилища std::atomic с последовательной согласованностью варьируется в зависимости от компилятора и аппаратной архитектуры.
Implicit Acquire Fence
Утверждение, что x86 в магазинах неявное ограждение приобретения неверно. Хранилища на платформе x86 имеют семантику выпуска, а не семантику приобретения. Семантика получения обычно реализуется с использованием барьеров памяти, таких как mfence или операции атомарного чтения с семантикой std::memory_order_acquire.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3