OSCompareAndSwap は CMPXCHG8B のような ABA 問題の影響を受けませんか?
1 に答える
2
それはすべて実装に依存します。OSCompareAndSwap* は、アトミック CAS 演算子を保証する唯一のインターフェイスです (CPU がサポートしている場合)。
x86の場合、64 ビット用のこの関数は次のように実装されます。
_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
したがって、あなたの答えはおそらく「はい」です。
于 2010-03-19T13:03:22.813 に答える