循环CAS
2017-02-20 本文已影响0人
onemoremile
Compare and Swap:CAS操作需要输入两个数值,一个旧值(期望操作 前的值),一个新值,在操作期间先比较旧值有没有发生变化,如果没有发生变化才交换成新值,发生了变化则不交换。
Q:处理器如何实现原子操作?
1.使用总线锁保证原子性
2.使用缓存锁保证原子性
Java如何实现原子操作:
(1)使用循环CAS实现原子操作
JVM中的CAS操作正是利用了处理器提供的CMPXCHG指令实现的,自旋的CAS实现的基本思路就是循环进行CAS操作直到成功为止。
3.使用锁机制实现原子操作
锁机制保证了只有获得锁的线程才能够操作锁定的内存区域。JVM内部实现了很多锁机制,有偏向锁,轻量级锁和互斥锁有意思的是除了偏向锁,JVM实现锁的方式都用了循环CAS,即当一个线程向进入同步块的时候使用CAS的方式来获取锁,当它退出同步块的是很好使用循环CAS释放锁。