Est-ce que OSCompareAndSwap (Mac OS X) est équivalent à CMPXCHG8B?OSCompareAndSwap (Mac OS X) est-il équivalent à CMPXCHG8B?
2
A
Répondre
1
Vous trouverez la définition des fonctions atomiques dans le fichier OSAtomic.s dans la source XNU. Par exemple, voici OSAtomicCompareAndSwapPtr for x86_64 dans la version 11/02/1486:
_OSCompareAndSwap64:
_OSCompareAndSwapPtr: #;oldValue, newValue, ptr
movq %rdi, %rax
lock
cmpxchgq %rsi, 0(%rdx) #; CAS (eax is an implicit operand)
sete %al #; did CAS succeed? (TZ=1)
movzbq %al, %rax #; clear out the high bytes
ret
0
verrouillage CMPXCHG8B
plus exactement
Il est pour les processeurs Intel, mais prendre en compte, que osx existe non seulement pour l'architecture intel, donc asm sera différent
+1 merci. Donc finalement OSCompareAndSwap est immunisé contre le problème ABA comme CMPXCHG8B? – Viet
Je ne suis pas vraiment familier avec CMPXCHG8B, mais on dirait qu'il a la même sémantique que cmpxchg et ne diffère que par ce qu'il regarde. En 32 bits, les registres ont seulement 32 bits de largeur, donc CMPXCHG8B regarde les paires de registres pour permettre de faire 64 bits CAS. Vous pouvez voir qu'il est utilisé pour les opérations CAS 64 bits dans le fichier OSAtomic.s i386 bits. – Ken
Cela signifie non. Merci. – Viet