关于CAS原子性的疑问

会不会有这种场景:

如有一个值为3

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

线程B成功把3变成5

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

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

#Java开发#
全部评论
比较和更新是一个原子操作
点赞 回复 分享
发布于 2021-06-04 17:29
    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
cas是硬件指令,由cpu保证原子性
点赞 回复 分享
发布于 2021-06-07 10:25
比较交换这是个原子操作,底层用的是汇编指令(intel)lock compxchg
点赞 回复 分享
发布于 2021-06-09 19:28

相关推荐

目前这家已经离职了,想着要不要再找一份可以转正的实习,想着all in春招,春招之后再找实习,但是又没把握春招能拿到offer。现在已经有一段实习了,7月到12月,当时all in转正,但是没得,也错过了秋招。现在问题就是说在学校,临港,不租房的话通勤来回得5 6个小时,租房又得倒贴实习,实习的话又没有经历去准备春招了。其实也是有可能毕业后往广东那边发展的,离家近一点,但是也就深圳java岗好一些。佬们路过能给晚辈一点建议吗。
黑皮白袜臭脚体育生:有实习经历除非到春招前能找到比实习经历title好的多的公司,不建议再找一段实习了,拿这段时间出来沉淀allin春招,春招后期还有补录,虽然机会不多但同样的竞争对手也不会多了,其实和春招高峰期相比拿offer难度差距不大,实在没拿到正式offer到五月份还有招25届的转正实习,再不行25届还能进一些接收应届生的社招岗,都有机会的另外宣传下自己的开源仿b站微服务项目,GitHub已经390star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
点赞 评论 收藏
分享
11-26 15:41
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务