原子操作CAS
一、什么是原子操作 不可被中断的一个或者一系列操作、 CAS是Compare And Set的缩写,是以一种 无锁的方式实现并发控制 。在实际情况下,同时操作同一个对象的概率非常小,所以多数加锁操作做的是无用功, CAS以一种乐观锁的方式实现并发控制 。 二、实现原子操作的方式 Java可以通过锁和循环CAS的方式实现原子操作。 三、CAS( Compare And Swap ) 为什么要有CAS? Compare And Swap就是比较并且交换的一个原子操作,由Cpu在指令级别上进行保证。 为什么要有CAS:因为通过锁实现原子操作时,其他线程必须等待已经获得锁的线程运行完以后才能获得资源,这样就会占用系统的大量资源 四、 CAS包含哪些参数? CAS包含三个参数:1、变量所在内存地址V;2、变量对应的值A;3、我们将要修改的值B。如果说V上的变量的值是A的话,就用B重新赋值,如果不是A,那就什么事也不做,操作的返回结果原值是多少。 循环CAS:在一个(死)循环【for(;;)】里不断进行CAS操作,直到成功为止(自旋操作即死循环)。 五、CAS的原理 利用了现代处理器都支持的CAS的指令,循环这个指令,直到成功为止 六、CAS 实现原子操作的三大问题 1、 ABA问题:其他的线程把值改成了 B ,很快改成了A,原子操作的线程发现值是A就修改,这样会有问题。解决ABA,引入版本号