CAS漏洞问题

来源:9-6 CAS

可乐少女

2021-06-04

老师好,有个问题想要请教一下哈,CAS分为两个步骤,先是比较内存中的值是否符合预期,一个是更新内存中的值。一个线程比较内存中的值符合预期,准备进行值更新的时候,正在这时会不会出现另外一个线程已经完成比较以及值更新了呢?

写回答

1回答

翔仔

2021-06-04

同学好,CAS是原子操作,更新时会存在同学说的问题,这样就会更新失败

0
5
慕尼黑7177051
回复
可乐少女
我的理解:CAS操作是作为乐观锁的底层实现,当线程1想要对一个共享变量A进行修改时,会使用CAS对其进行加锁,在线程1想要修改之前,线程2对共享变量A进行修改成B,之后又修改为A,但实际A中的属性发生了改变(此A非彼A),这时线程1想要对A变量进行修改时,CAS锁对其进行比较,是发现不了其中的变化的。这就是ABA问题,如果需要解决,就需要用到AtomicStampedReference。即用版本戳version来标记对象,进而避免ABA问题。所以CAS是原子操作,可能是CAS其中的“比较”和“交换”这两个操作是原子的,与ABA问题无关。
2022-07-13
共5条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程