首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >像CMPXCHG8B一样,OSCompareAndSwap对ABA问题免疫吗?

像CMPXCHG8B一样,OSCompareAndSwap对ABA问题免疫吗?
EN

Stack Overflow用户
提问于 2010-03-19 20:01:09
回答 1查看 260关注 0票数 2

像CMPXCHG8B一样,OSCompareAndSwap对ABA问题免疫吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-19 21:03:23

这完全取决于实现。OSCompareAndSwap*只是一个保证原子CAS运算符的接口(如果CPU支持它的话)。

对于x86,64位的此函数实现为

代码语言:javascript
复制
_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

所以你的答案可能是“是”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2476996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档