美文网首页jvmjava jvm多线程
原子操作的实现原理

原子操作的实现原理

作者: 美团Java | 来源:发表于2016-06-30 15:52 被阅读11254次

简书 占小狼
转载请注明原创出处,谢谢!

原子(atomic),本意是指“不能被进一步分割的粒子”。原子操作意味着“不可被中断的一个或一系列操作”。

接下去一起看看在Intel处理器和Java里是如何实现原子操作的。

术语定义

  • Cache line(缓存行)
  • Compare and Swap(比较并交换)
  • cpu pipeline(cpu流水线)
  • memory order violation(内存顺利冲突)

处理器实现原子操作

当处理器读取内存的一个字节时,其它处理器不能访问这个字节的内存地址,最新的处理器能自动保证处理器对同一缓存行里进行16/32/64位的操作是原子的。处理器提供总线锁定缓存锁定的机制保证复杂内存操作的原子性。

1、总线锁保证原子性

使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其它处理器的请求将被阻塞,那么该处理器就能独自共享内存。

2、缓存锁保证原子性

“缓存锁定”指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不需要在总线上声言LOCK#信号,而是修改内部的内存地址,通过缓存一致性机制保证操作的原子性。
例外:当操作的数据不能被缓存在处理器内部,或操作的数据跨多个缓存行,处理器会调用总线锁定。

缓存一致性

缓存一致性会阻止同时修改由两个以上处理器的内存区域数据,当其他处理器回写被锁定的缓存行数据时,会使其它处理器的缓存行无效。

Java原子操作实现

在Java中通过锁和循环CAS的方式实现原子操作。

CAS

jvm中的CAS操作是基于处理器的CMPXCHG指令实现的,CAS存在三个问题:

  • ABA问题
  • 循环时间长开销大
  • 只能保证一个共享变量的原子操作

锁机制保证了只有获得锁的线程才能操作锁定的内存区域,具体实现可以参考java synchronized

END。
我是占小狼。
在魔都艰苦奋斗,白天是上班族,晚上是知识服务工作者。
读完我的文章有收获,记得关注和点赞哦,如果非要打赏,我也是不会拒绝的啦!

相关文章

  • 原子操作实现原理

    一些概念 CAS:Compare And Swap,比较并交换,CAS操作需要两个值,一个旧值和一个新值,比较期间...

  • Java并发机制底层实现(三)

    原子操作实现原理 概念 原子(atomic)本意是"不能被进一步分割的最小粒子",而原子操作(atomic ope...

  • Java原子操作的实现原理

    原子操作的实现原理 引言 原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic oper...

  • 原子操作的实现原理

    原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中...

  • 原子操作的实现原理

    简书 占小狼转载请注明原创出处,谢谢! 原子(atomic),本意是指“不能被进一步分割的粒子”。原子操作意味着“...

  • 原子操作的实现原理

    1. 处理器如何实现原子操作 1.1 使用总线锁 1.2 使用缓存锁 2. Java如何实现原子操作 2.1 偏向...

  • 原子操作的实现原理

    Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令...

  • java多线程(三)原子操作CAS

    CAS(Compare And Swap)什么是原子操作?如何实现原子操作CAS的原理:利用了现代处理器都支持的C...

  • 03 原子操作CAS(Compare And Swap)

    1 什么是原子操作?如何实现原子操作? 2 CAS的原理 在计算机科学中,比较和交换(Conmpare And S...

  • Redis 事务操作原理

    事务原理剖析 redis事务操作,原理是基于pipe队列实现原子性提交操作,在只想事务操作,相当于将需要提交的命令...

网友评论

  • 进阶的小豆子:都是这样成长起来的,对吧~
  • wyn_做自己:打卡,有点晕
  • leslieYoung:不太懂,求推荐相关的电子书
  • 61351f6bf470:有些懵:pensive:
    美团Java:@GentlemanQcc 起来,不要懵
  • 1219aa09efca:"处理器不需要在总线上声言LOCK#信号,而是修改内部的内存地址,通过缓存一致性机制保证操作的原子性" 中的 "修改内部的内存地址" 是什么意思
    Joahcy: @今晚打老虎_9e44 哥们,我也不理解 到底是什么意思
    1219aa09efca:原文是

    " Instead, it will modify the
    memory location internally and allow it’s cache coherency mechanism to insure that
    the operation is carried out atomically"

    ,memory location 是 存储单元的 意思,我觉得应该是 "修改缓存中的数据" 的意思

    参考:IA-32卷3:系统编程指南[123457 11 12].pdf 7.1.4 章节
  • 昵称个P:好像在Java多线程书里看到类似的,得再看一遍了那本书了
    美团Java:原理都是一样,这些都是一些总结而已
  • xikaka:很多文章读完后感觉意犹未尽, 如果能够在文章后面列一些关于这个知识点的参考文档,那就更好了。
    美团Java:@xikaka 好的,多谢提议
  • 盗骊信息安全:哥们,好多知识点都是写一半就不写了!一头雾水
    美团Java:@盗骊信息安全 哈哈,一开始写功力不够啊,有什么问题可以一起探讨
  • a8d9550f3d90:有点简单

本文标题:原子操作的实现原理

本文链接:https://www.haomeiwen.com/subject/elxfjttx.html