CAS:全称Compare and swap,字面意思:”比较并交换“,CAS用于保障操作的原子性(线程安全)
CAS的操作是将寄存器A的值与内存M的值进行比较,如果相同则把寄存器B的值和M的值进行交换(交换是指把内存的值放到寄存器B,同时把寄存器B的值写给内存),如果不相同则无事发生~~
CAS是由CPU的一条指令,原子的完成的,是线程安全的,效率很高(比加锁的效率高)~~
CAS的ABA问题
ABA问题就是当我们将寄存器A的值与内存中的值进行比较,发现寄存器A中的值和内存中的值相同,但是我们无法判定内存中的值是始终没变,还是改变了在比较之前又变回来了
解决ABA问题
另外搞一个内存,保存内存中的值的"修改次数"(只增不减的版本号)或者是"上次修改时间"(只增不减)来解决ABA问题~~
再另外搞一个内存,保存寄存器A中的值的"修改次数"(只增不减的版本号)或者是"上次修改时间"(只增不减)
对于我们之后的比较,我们可以不再比较寄存器A与内存的值,而是比较修改次数/上次修改时间是否一致即可~~