OSCompareAndSwap (Mac OS X)은 CMPXCHG8B와 동일합니까?OSCompareAndSwap (Mac OS X)은 CMPXCHG8B와 동일합니까?
2
A
답변
1
다를 수 있습니다 XNU 소스의 OSAtomic.s 파일에있는 원자 함수 중 하나. 예를 들어, 다음 버전 1486년 2월 11일에서 OSAtomicCompareAndSwapPtr for x86_64입니다 :
_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 감사합니다. 그래서 결국 OSCompareAndSwap은 CMPXCHG8B와 같은 ABA 문제에 면역이됩니까? – Viet
저는 CMPXCHG8B에 익숙하지 않지만, cmpxchg와 동일한 의미를 갖고 있으며 보이는 부분 만 다릅니다. 32 비트에서 레지스터는 32 비트 폭이므로 CMPXCHG8B는 64 비트 CAS를 수행 할 수 있도록 레지스터 쌍을 조사합니다. i386 비트 OSAtomic.s 파일에서 64 비트 CAS 작업에 사용됨을 알 수 있습니다. – Ken
아니요를 의미합니다. 감사. – Viet