CAS机制导致ABA问题以及解决方案
CAS
(Compare And Swap)
原子类实现原子操作的原理就是CAS机制
CAS机制保证了原子操作,也增加了耗时
CAS机制的原理
每次操作之前都要先和主内存的值进行比较
如果相等 ,那么就进行操作,操作完马上写回主内存 如果不相等,先从主内存获取最新值,然后再和主内存的值比较,直到相等再进行操作,操作完马上写回主内存。
操作之前先比较,相等再操作,不相等拿最新值,再比较,直到相等再执行操作。这可能是一个循环的过程
ABA问题
CAS会导致ABA问题(狸猫换太子)
CAS算法实现一个重要前提需要取出内存中某时刻的数据并与主内存数据比较,那个这个时间差内,数据可能会变化,比如A和B线程都从主内存中取出count1,B线程对数据操作,count1中的数据改变成了count2,然后B线程又把数据变回count1,刷回主内存,这时线程A进行CAS操作发现主内存中的仍是count1,然后线程A操作成功。
尽管线程A的CAS操作成功,但不代表这个操作过程是没有问题的
本质:ABA问题的根本在
共有 0 条评论