«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Зачем использовать `memory_order_seq_cst` для настройки флага остановки, проверенного с помощью` memory_order_relaxed`?

Зачем использовать `memory_order_seq_cst` для настройки флага остановки, проверенного с помощью` memory_order_relaxed`?

Опубликовано в 2025-03-23
Просматривать:857

Why Use `memory_order_seq_cst` for Setting a Stop Flag Checked with `memory_order_relaxed`?

почему использовать memory_order_seq_cst для настройки флага остановки, если проверяется с помощью memory_order_relaxed? Включение:

Основные потоки нереста { // выполнять задачи }

  • Основной поток в конечном итоге устанавливает остановку на истину с помощью memory_order_seq_cst.
  • Саттер утверждает, что с использованием Memory_order_relaxed для проверки флага является приемлемым из -за минимального воздействия на задержку остановки потока. Однако причина использования memory_order_seq_cst для настройки флага «Стоп» остается неясной.

    while (!stop.load(std::memory_order_relaxed))
    {
      // Perform tasks
    }
    анализа:
mo_relaxed является достаточным как для загрузки, так и для хранения флага остановки: &&&]

. Наблюдение за изменениями в остановке или Flags Keep_running имеет решающее значение. Однако в стандарте ISO C не указывается время видимости хранилища или факторы, влияющие на его. Реализации обязаны только обеспечить видимость в конечном периоде. Реализации C реального мира используют механизмы когерентности аппаратного кэша, обычно приводящие к низкой задержке (десятки наносекунд) для видимости хранилища.

ни SEQ_CST, ни расслабленное приказы памяти ускоряют видимость хранилища; Они просто контролируют поведение последующих операций относительно магазина или нагрузки. Более сильные заказы не ускоряют события, но задерживают другие операции, пока не будет поддержан указанный порядок. ]

расслабленная видимость и когерентность кеша с аппаратным кэшем:

на реальном оборудовании с согласованностью кэша, память, не улучшают время видимости хранилища; Они управляют исключительно способностью последующих операций становиться глобально видимыми перед обязательством хранить.

. false.

избегание ненужного выполнения инструкции, особенно на ISA, где нагрузки приобретения или seq_cst требуют дополнительных инструкций (например, Armv7 dmb ish).

заключение:

в этом сценарии. Хранив флаг остановки. MEARY_ORDER_SEQ_CST не требуется для улучшения времени видимости хранилища. Вместо этого он используется для обеспечения желаемого упорядочения последующих операций и избежать проблем с одновременными авторами.

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3