2
Est-ce que OSCompareAndSwap est immunisé contre les problèmes ABA comme CMPXCHG8B?OSCompareAndSwap est-il immunisé contre les problèmes ABA comme CMPXCHG8B?
Est-ce que OSCompareAndSwap est immunisé contre les problèmes ABA comme CMPXCHG8B?OSCompareAndSwap est-il immunisé contre les problèmes ABA comme CMPXCHG8B?
Tout dépend de l'implémentation. OSCompareAndSwap * est seulement une interface qui garantit un opérateur CAS atomique (si la CPU le supporte).
Pour x86 cette fonction 64 bits est mis en œuvre comme
_OSCompareAndSwap64:
pushl %edi
pushl %ebx
movl 4+8(%esp), %eax #; low 32-bits of oldValue
movl 8+8(%esp), %edx #; high 32-bits of oldValue
movl 12+8(%esp), %ebx #; low 32-bits of newValue
movl 16+8(%esp), %ecx #; high 32-bits of newValue
movl 20+8(%esp), %edi #; ptr
lock
cmpxchg8b 0(%edi) #; CAS (eax:edx, ebx:ecx implicit)
sete %al #; did CAS succeed? (TZ=1)
movzbl %al, %eax #; clear out the high bytes
popl %ebx
popl %edi
ret
donc la réponse pour vous est probablement « oui ».
+1 merci Kenny. Donc _OSCompareAndSwap64 contient cmpxchg8b, je suppose qu'il devrait être immunisé au problème ABA alors. – Viet