OSCompareAndSwap是否对像CMPXCHG8B这样的ABA问题免疫?

时间:2010-03-19 12:01:09

标签: macos assembly kernel atomic compare-and-swap

OSCompareAndSwap是否不受像CMPXCHG8B这样的ABA问题的影响?

1 个答案:

答案 0 :(得分: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

所以答案可能就是“是”。