2010-03-19 5 views

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

+1 merci. Donc finalement OSCompareAndSwap est immunisé contre le problème ABA comme CMPXCHG8B? – Viet

+0

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

+0

Cela signifie non. Merci. – Viet

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

+0

Merci, je sais que « verrouiller CMPXCHG8B » et conscient du fait que OS X fonctionne sur PPC aussi. Mais pour le cas où OSX sur Intel 32bit, serait-il équivalent? – Viet

+0

Le passage des paramètres de fonction aux registres appropriés sera ajouté auparavant. – drlazy