В своем докладе об «атомном оружии» Херб Саттер демонстрирует пример, где основной поток устанавливает флаг остановки с помощью Memory_order_seq_cst, а несколько рабочих потоков проверяют этот флаг. используя Memory_order_relaxed. Саттер объясняет, что использование Memory_order_relaxed для проверки приемлемо из-за незначительного влияния на задержку. Однако он предлагает использовать Memory_order_seq_cst для операции, которая устанавливает флаг, без указания конкретной причины.
Здесь решающее значение имеет понимание концепции упорядочения памяти. Порядок памяти определяет гарантии видимости и синхронизации, обеспечиваемые атомарными операциями. В этом примере использование Memory_order_seq_cst для установки флага обеспечивает следующее:
В то время как использование Memory_order_seq_cst для операции записи может показаться чрезмерным, учитывая, что операция загрузки использует Memory_order_relaxed, на самом деле это не имеет существенных последствий для производительности. Реализации необходимы для того, чтобы сделать атомарные хранилища видимыми в течение разумного периода времени, независимо от используемого порядка памяти.
Хотя влияние на задержку использования Memory_order_seq_cst для операции записи минимально , он предоставляет несколько преимуществ:
В заключение, использование Memory_order_seq_cst для установки флаг остановки в этом примере предназначен не для оптимизации производительности, а для обеспечения корректности и безопасности потоков. Хотя Memory_order_relaxed приемлем для операции загрузки, использование Memory_order_seq_cst для операции записи обеспечивает дополнительные гарантии без ущерба для производительности.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3