Por qué la tienda std::atomic emplea XCHG para lograr coherencia secuencial
En el contexto de std::atomic para arquitecturas x86 y x86_64, un La operación de almacenamiento con coherencia secuencial (std::memory_order_seq_cst) emplea XCHG en lugar de un almacenamiento simple con una barrera de memoria como la técnica para lograr una semántica de liberación secuencial.
Consistencia secuencial y xchg
La coherencia secuencial dicta que todas las operaciones de memoria parecen ejecutarse en algún orden secuencial, y este orden es lo mismo para todos los hilos. XCHG, una instrucción x86 que intercambia atómicamente los valores de dos operandos, satisface inherentemente este requisito de coherencia secuencial. Al utilizar XCHG para realizar una operación de escritura, std::atomic garantiza que el almacén se vuelva globalmente visible para todos los subprocesos en un punto específico del orden de ejecución, evitando el reordenamiento con operaciones posteriores.
mov- store mfence vs. XCHG
Si bien un simple mov-store seguido de una barrera de memoria (como mfence) podría teóricamente proporcionar semántica de liberación, no lo es suficiente para operaciones de almacenamiento de lanzamiento secuencial. MFENCE, una instrucción de barrera de memoria que establece una barrera de memoria, garantiza que las operaciones de escritura anteriores se guarden en la memoria antes de continuar. Sin embargo, no impide que las operaciones de carga posteriores se reordenen antes del almacén de lanzamiento.
Consideraciones de rendimiento
La elección entre mov-store mfence y XCHG para lanzamiento secuencial Las operaciones de la tienda implican compensaciones en el rendimiento.
Detalles de implementación
En la práctica, la implementación específica de La tienda std::atomic con consistencia secuencial varía según el compilador y la arquitectura del hardware.
Valla de adquisición implícita
La afirmación de que las tiendas x86 tienen una barrera de adquisición implícita es incorrecta. Las tiendas en x86 tienen semántica de lanzamiento, no de adquisición. La semántica de adquisición generalmente se aplica mediante barreras de memoria como mfence u operaciones de lectura atómica con la semántica std::memory_order_acquire.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3