采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师你好,CAS操作中,更新内存数据之前会比较下预期原值和内存中的值是否相等,如果不相等则不更新,如果相等,则做更新;这里就有个漏洞:比较内存数据和预期原值发现相等之后,以及做更新之前,这中间是有个时间间隔的,在这个时间间隔内,其它线程对内存数据做了更新,紧接着你再去更新,不就覆盖掉其它线程做的更新了吗?
同学好,不会的哈,CAS调用的是计算机原生汇编指令cmpxchg 属于原子操作,不会出现间隔的情况的,实际上内部也是有锁,只是锁很轻量。
"程序会根据当前处理器的类型来决定是否为cmpxchg指令添加lock前缀。如果程序是在多处理器上运行,就为cmpxchg指令加上lock前缀(lock cmpxchg)。反之,如果程序是在单处理器上运行,就省略lock前缀(单处理器自身会维护单处理器内的顺序一致性,不需要lock前缀提供的内存屏障效果)"
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.9k 27
2.8k 22
1.3k 15
1.6k 14
1.4k 14
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号