原子操作的实现原理

拈花ヽ惹草 提交于 2020-04-29 21:04:13

1. 处理器如何实现原子操作

1.1 使用总线锁

1.2 使用缓存锁

2. Java如何实现原子操作

2.1 偏向锁

线程在进入和退出同步块时不需要进行CAS操作来加锁和解锁,只需简单地测试一下对象头的Mark Word里是否 存储着指向当前线程的偏向锁。

  1. 如果测试成功,表示线程已经获得了锁。

  2. 如果测试失败,则需要再测试一下Mark Word中偏向锁的标识是否设置成1(表示当前是偏向锁):

    2.1 如果没有设置,则使用CAS竞争锁; 2.1 如果设置了,则尝试使用CAS将对象头的偏向锁指向当前线程。

2.2 使用循环CAS

具体实现细节

JVM中的CAS操作正是利用了处理器提供的CMPXCHG指令实现的。

自旋CAS实现的基本思路就是循环进行CAS操作直到成功为止。

CAS的三大问题

  1. ABA问题
  2. 循环时间长开销大
  3. 只能保证一个共享变量的原子操作
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!