La documentación de Intel parece bastante clara de que es redundante.
Manual
IA-32 Arquitectura Intel® software del desarrollador volumen 3A: Sistema de Guía de programación, Parte 1
7.1.2.1 dice:
Las operaciones en el que el procesador sigue automáticamente el bloqueo la semántica es la siguiente :
- Cuando se ejecuta una instrucción XCHG que hace referencia a m Emory.
Del mismo modo,
Intel® 64 e IA-32 Arquitecturas Manual software del desarrollador 2B Volumen: Instrucción de referencia del conjunto, NZ
XCHG:
Si una se hace referencia al operando de memoria, el protocolo de bloqueo del procesador es automáticamente impl durante la operación de intercambio, independientemente de la presencia o ausencia del prefijo LOCK o del valor del IOPL.
Tenga en cuenta que esta realidad no significaba que la señal LOCK # se afirma si se utiliza o no el prefijo LOCK, 7.1.4 se describe cómo en los procesadores posteriores semántica de bloqueo se conservan sin cerradura # si la posición de memoria está en caché Inteligente, y definitivamente sobre mi cabeza.
La opción PrintAssembly en Oracle Hotspot JVM también parece estar de acuerdo con esto. Al generar el ensamblaje, _no tiene el prefijo de bloqueo en la instrucción xchg en x86-64. –