2010-06-29 6 views

Répondre

2

Conformément au code 80386 Instruction Manual, BUS LOCK est validé pour la durée de l'échange. Le préfixe LOCK n'a pas de précédence pour cette opération, pas plus que la valeur du I/O Privilege Level. Ma suggestion est que puisque la documentation indique que BUS LOCK est affirmé indépendamment de la présence du préfixe LOCK, est autrement sûr. En cas de doute, ajoutez un LOCK.

12

Depuis 386 jours, xchg va affirmer le signal de verrouillage que vous ayez ou non placé le préfixe de verrouillage. Intel's documentation couvre cela très clairement dans la référence de jeu d'instructions IA-32 N-Z.

17

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.

+0

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

Questions connexes