¿`Xchg` abarca` mfence` suponiendo que no hay instrucciones no temporales?
Ya he vistoesta respuesta yesta respuesta, pero ninguno parece claro y explícito sobre la equivalencia o no equivalencia demfence
yxchg
bajo el supuesto de que no hay instrucciones no temporales.
The Intelinstruction reference paraxchg
menciona questa instrucción es útil para implementar semáforos o estructuras de datos similares para la sincronización de proceso, y más referencias Capítulo 8 deVolume 3A. Esa referencia establece lo siguiente.
Para los procesadores de la familia P6, las operaciones bloqueadas serializan todas las operaciones de carga y almacenamiento pendientes (es decir, espere a que se completen). Esta regla también es cierta para los procesadores Pentium 4 e Intel Xeon, con una excepción. Las operaciones de carga que hacen referencia a tipos de memoria con un orden débil (como el tipo de memoria WC) pueden no ser serializadas.
Losmfence
documentación reclama lo siguiente.
Realiza una operación de serialización en todas las instrucciones de carga desde memoria y almacenamiento en memoria emitidas antes de la instrucción MFENCE. Esta operación de serialización garantiza que cada instrucción de carga y almacenamiento que precede a la instrucción MFENCE en el orden del programa sea visible globalmente antes de cualquier instrucción de carga o almacenamiento que siga a la instrucción MFENCE. 1 La instrucción MFENCE se ordena con respecto a todas las instrucciones de carga y almacenamiento, otras instrucciones MFENCE, cualquier instrucción LFENCE y SFENCE, y cualquier instrucción de serialización (como la instrucción CPUID). MFENCE no serializa el flujo de instrucciones.
Si ignoramos los tipos de memoria débilmente ordenados,does xchg (lo que implicalock
) abarcan todas las garantías de mfence con respecto al pedido de memoria?