È OSCompareAndSwap immune al problema ABA come CMPXCHG8B?
-
21-09-2019 - |
Domanda
È OSCompareAndSwap è immune al problema ABA come CMPXCHG8B?
Soluzione
Tutto dipende l'attuazione. OSCompareAndSwap * è solo un'interfaccia che garantisce un operatore CAS atomica (se la CPU supporta).
x86 questa funzione per 64 bit viene implementato come
_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
così la risposta per voi, probabilmente è "sì".
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow