关于CAS原子性的疑问

会不会有这种场景:

如有一个值为3

A线程想把他更新成4,先比较期望值是不是3,比较完后,正要进行替换操作。线程被切了。

线程B成功把3变成5

线程A恢复后,执行替换操作又把它变成了4。

总得来说CAS是如何保证 比较和替换 这两个操作是原子性的。

#Java开发#
全部评论
比较交换这是个原子操作,底层用的是汇编指令(intel)lock compxchg
点赞 回复 分享
发布于 2021-06-09 19:28
cas是硬件指令,由cpu保证原子性
点赞 回复 分享
发布于 2021-06-07 10:25
    asm volatile("lock cmpxchg %[new], %[ptr]"         :"+a"(expected), [ptr] "+m"(*addr)         :[new] "r"(new_value)         :"memory"); 在Intel X86-64架构中,cmpxchg指令用于比较与置换指定的地址与值。它先比较地址addr中存储的值与寄存器%eax中的值,如果相等则将new_value存入地址addr中,否则将addr中存储的数据读入寄存器%eax中。通过给这条指令加上lock前缀,Intel处理器可以保证上述比较与置换操作的原子性。
点赞 回复 分享
发布于 2021-06-05 15:12
比较和更新是一个原子操作
点赞 回复 分享
发布于 2021-06-04 17:29

相关推荐

07-17 12:09
门头沟学院 Java
讲的口干舌燥,头都晕了怎么要讲这么长啊
码农索隆:没事,你口干舌燥,他不一定会看,
投递小鹏汽车等公司8个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
Lorn的意义:1.你这根本就不会写简历呀,了解太少了 2.你这些项目经历感觉真的没啥亮点啊,描述的不行,重写书写一下让人看到核心,就继续海投 注意七八月份ofer还是比较多的,越往后机会越少,抓住时机,抓紧检查疏漏,加油查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-18 12:01
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务