2010-06-29 19 views

Respuesta

2

Según el 80386 Instruction Manual, BUS LOCK se impone durante la duración del intercambio. El prefijo LOCK no tiene precedencia para esta operación y tampoco lo tiene el valor I/O Privilege Level.

Mi sugerencia es que, dado que la documentación indica que BUS LOCK se afirma independientemente de la presencia del prefijo LOCK, LOCK XCHG EAX, mem es seguro. En caso de duda, agregue un LOCK.

12

Desde hace 386 días, xchg confirmará la señal de bloqueo independientemente de que coloque o no el prefijo de bloqueo. Intel's documentation cubre esto bastante claramente en el conjunto de instrucciones IA-32 referencia N-Z.

17

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.

+0

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. –

Cuestiones relacionadas