La documentation d'Intel semble assez claire qu'elle est redondante.
IA-32 architecture Intel® Software Manuel de développeur Volume 3A: système Guide de programmation, partie 1
7.1.2.1 dit:
Les opérations sur lesquelles le processeur suit automatiquement le verrouillage la sémantique est comme suit:
- Lors de l'exécution d'une instruction XCHG qui fait référence à m émory.
De même,
Intel® 64 et IA-32 Architectures Software Manuel de développeur Volume 2B: du jeu d'instructions de référence, Nouvelle-Zélande
XCHG:
Si une l'opérande mémoire est référencé, le protocole de verrouillage du processeur est automatiquement impl consolidé pendant la durée de l'opération d'échange, indépendamment de la présence ou de l'absence du préfixe LOCK ou de la valeur de l'IOPL.
Notez que cela ne signifie en réalité que le signal de verrouillage # est affirmé ou non le préfixe LOCK est utilisé, 7.1.4 décrit comment les processeurs ultérieurs sémantique de verrouillage sont conservés sans # LOCK si l'emplacement de mémoire est mis en cache. Intelligent, et définitivement sur ma tête.
L'option PrintAssembly sur la JVM Oracle Hotspot semble également être d'accord avec cela. Lors de la génération de l'assembly, il n'a pas de préfixe de verrouillage sur l'instruction xchg sur x86-64. –