循环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释放锁。

上一篇下一篇

猜你喜欢

热点阅读