悲观锁就是认为并发时一定会有冲突发生,采用互斥的策略。比如java中的synchronized。
而乐观锁是假设并发时不会有冲突发生,如果发生冲突,则操作失败,并不断重试。乐观锁的机制就是CAS(Compare and Swap)。
大多数的处理器都会实现一个CAS指令。
CAS包含了三个操作数,需要读写的内存位置V,进行比较的值A,和需要写入的新值B。
当且仅当V等于A时,CAS才会通过原子方式用新值B更新V。
它的含义是:我认为V的值应该是A,那么将V的值更新为B,否则不修改并告诉V的实际值是多少。
CAS是一项乐观锁技术,它希望可以成功执行更新操作,并且如果有另外一个线程在最近一次检查后更新了该变量。CAS可以检测到这个错误。