CAS(compare and swap)
可以将CAS操作看成是这样一段代码:
address:内存地址,储存的是现在的值
expectValue:期望值,开始拿进来的时候的值
swapValue:交换值,进行操作后的值
比如我们在进行一个count++的时候:
expectValue就是进行++操作时刚拿进去的值
swapValue就是进行++操作之后的值
address就是现在count的内存地址
在进行++操作后,先看看address里的值是否等于expectValue,如果发生了变化,就不和swapValue进行交换
如果等于expectValue,说明没有发生变化,就和swapValue进行交换
这样做的目的就是防止在count++的过程中count的值由于别的操作发生了变化,如果这时候将count的值变成count++后的值就导致count的值不准确
上述代码并非原子的,在运行过程中就可能随着线程调度有概率产生问题
但是真正的CAS操作其实是一条CPU指令,这一条指令就能完成上述这一段代码的功能
CAS就像是打开了新世界的大门,可以不进行加锁就保证线程安全