"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que usar `Mememy_Order_Seq_Cst` para definir uma bandeira de parada verificada com` Mememy_order_relaxed`?

Por que usar `Mememy_Order_Seq_Cst` para definir uma bandeira de parada verificada com` Mememy_order_relaxed`?

Postado em 2025-03-23
Navegar:834

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

Por que utilizar memória_ordorde_seq_cst para definir a bandeira de parada se verificada com memória_ordorde_relaxed?

em suas "atomic weans" Apresentation, a gemida Sutter mostra Envolvendo:

  • thread Main Thread Spawning Worker Threads
  • Trabalhadores checando uma bandeira de parada:

    while (!stop.load(std::memory_order_relaxed))
    {
      // Perform tasks
    }
  • o thread principal eventualmente define param como true usando memória_ordorde_seq_cst.

sutter afirma que o uso de memória_order_relaxed para verificar se o sinalizador é aceitável devido ao impacto mínimo na parada de parada. No entanto, a razão para empregar memória_order_seq_cst para definir a bandeira de parada permanece pouco clara. de observar as alterações nas bandeiras Stop ou Keep_Running é crucial. No entanto, o padrão ISO C não especifica o tempo de visibilidade do armazenamento ou os fatores que o afetam. As implementações são obrigatórias apenas para garantir a visibilidade dentro de um período finito. As implementações C do mundo real aproveitam os mecanismos de coerência do cache de hardware, geralmente resultando em baixa latência (dezenas de nanossegundos) para visibilidade da loja. Eles apenas controlam o comportamento das operações subsequentes em relação à loja ou carga. As ordens mais fortes não aceleram os eventos, mas atrasam outras operações até que a ordem especificada seja mantida. Eles gerenciam apenas a capacidade das operações subsequentes de se tornarem globalmente visíveis antes do compromisso da armazenamento. False.

Evitar a execução desnecessária de instruções, especialmente nos ISAs em que adquirir ou seq_cst cargas requerem instruções adicionais (por exemplo, ARMV7 DMB ISH). armazenando a bandeira de parada. Memory_Order_Seq_Cst não é necessário para melhorar o tempo de visibilidade da loja. Em vez disso, é usado para aplicar a ordem desejada das operações subsequentes e evitar problemas com escritores simultâneos.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3