threading thread que off juegos example current_thread multithreading x86 atomicity

multithreading - thread - En un x86 multinúcleo, ¿es necesario un BLOQUEO como prefijo de XCHG?



thread python 3 (3)

Si mem es una ubicación de memoria compartida, necesito:

XCHG EAX,mem

o:

LOCK XCHG EAX,mem

¿Hacer el intercambio atómicamente?

Googlear esto produce respuestas tanto sí como no. ¿Alguien sabe esto definitivamente?


De acuerdo con el manual de instrucciones 80386 , el BUS LOCK se confirma durante la duración del intercambio. El prefijo LOCK no tiene prioridad para esta operación y tampoco lo tiene el valor del Nivel de privilegio de E / S.

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


Desde 386 días, xchg afirmará la señal de Bloqueo, ya sea que coloques el prefijo de bloqueo o no. La documentación de Intel cubre esto claramente en la referencia de conjunto de instrucciones IA-32 NZ.


La documentación de Intel parece bastante clara de que es redundante.

IA-32 Manual del desarrollador de software de arquitectura Intel® Volumen 3A: Guía de programación del sistema, Parte 1

7.1.2.1 dice:

Las operaciones en las que el procesador sigue automáticamente la semántica LOCK son las siguientes:

  • Al ejecutar una instrucción XCHG que hace referencia a la memoria.

Similar,

Manual del desarrollador de software para arquitecturas Intel® 64 e IA-32 Volumen 2B: Referencia del conjunto de instrucciones, NZ

XCHG:

Si se hace referencia a un operando de memoria, el protocolo de bloqueo del procesador se implementa automáticamente durante la operación de intercambio, independientemente de la presencia o ausencia del prefijo LOCK o del valor del IOPL.

Tenga en cuenta que esto no significa en realidad que la señal de BLOQUEO se afirme ya sea que se use el prefijo de BLOQUEO o no, 7.1.4 describe cómo se conservan los semánticos de bloqueo de los procesadores posteriores sin un BLOQUEO de LOCK si se almacena en caché la ubicación de la memoria. Inteligente, y definitivamente sobre mi cabeza.