Por que a loja std::atomic emprega XCHG para consistência sequencial
No contexto de std::atomic para arquiteturas x86 e x86_64, um operação de armazenamento com consistência sequencial (std::memory_order_seq_cst) emprega XCHG em vez de um armazenamento simples com uma barreira de memória como a técnica para obter semântica de liberação sequencial.
Consistência sequencial e xchg
A consistência sequencial determina que todas as operações de memória parecem ser executadas em alguma ordem sequencial, e essa ordem é a mesma para todos os threads. XCHG, uma instrução x86 que troca atomicamente os valores de dois operandos, satisfaz inerentemente esse requisito de consistência sequencial. Ao usar XCHG para executar uma operação de gravação, std::atomic garante que o armazenamento se torne globalmente visível para todos os threads em um ponto específico na ordem de execução, evitando a reordenação com operações subsequentes.
mov- armazenar mfence vs. XCHG
Embora um simples mov-store seguido por um limite de memória (como mfence) possa teoricamente fornecer semântica de liberação, ele não é suficiente para operações de armazenamento de liberação sequencial. MFENCE, uma instrução de limite de memória que estabelece uma barreira de memória, garante que as operações de gravação anteriores sejam confirmadas na memória antes de prosseguir. No entanto, isso não impede que as operações de carregamento subsequentes sejam reordenadas antes do armazenamento de lançamento.
Considerações de desempenho
A escolha entre mov-store mfence e XCHG para liberação sequencial as operações de armazenamento envolvem compensações de desempenho.
Detalhes de implementação
Na prática, a implementação específica do armazenamento std::atomic com consistência sequencial varia dependendo do compilador e da arquitetura de hardware.
Implicit Acquire Fence
A afirmação de que x86 as lojas têm uma barreira de aquisição implícita está incorreta. As lojas em x86 possuem semântica de lançamento, não semântica de aquisição. A semântica de aquisição normalmente é aplicada usando barreiras de memória, como mfence ou operações de leitura atômica com semântica std::memory_order_acquire.
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