CAS操作的基本概念及ABA问题!

270 阅读1分钟
  • CAS全称:CompareAndSwap,比较在交换。其实比较简单。线程A需要对一个全局变量 i=0 进行修改操作,为了保证线程安全性问题,线程A需要将 i 的值复制到线程栈中进行修改,比如i++操作。然后将值赋值给原来的 i 。此时有两种情况: 1,若i值不变,代表没有其他线程对 i 进行操作,直接赋值、及完成CAS;2,若 i 值发生变化 ,将继续赋值 i 的值到线程栈中,继续 i++,再比较···,一直重复到完成。

image.png

  • ABA问题:当线程A对 i++ 操作的过程中,线程B对 i 操作变为5后;线程C又对 i 操作变回了 0 ;这就是ABA问题,解决方法,对i 加版本号,记入每一个线程对i 操作的记录。
  • 直接上图: