美文网首页
volatile(2)

volatile(2)

作者: 谁家的猪 | 来源:发表于2019-07-21 10:05 被阅读0次

    实现原理

    有volatile修饰的共享变量进行写操作时,汇编指令会生成Lock前缀。Lock前缀的指令在多核处理器下会引发两件事:

    1. 将当前处理器缓存行的数据写回系统内存。
    2. 这个写回内存的操作会使其他CPU里缓存了该内存地址的数据失效。

    为了提高处理速度,处理器不会直接和内存进行通信,先将系统内存中的数据读到内部缓存,然后进行操作,但是操作完不确定时间写回内存。对使用volatile修饰的共享变量进行写操作,JVM会发出带Lock前缀的指令,将变量所在缓存行的数据写回系统内存。但是其他CPU中的数据还是旧的,为了保证各个处理器的缓存是一致的,就会实现缓存一致性协议。每个处理器通过嗅探在总线上传播的数据来检查自己缓存是否失效,当发现自己缓存行对应的内存地址被修改时,就会把当前处理器缓存行的状态设为失效,下次对该数据进行修改操作时,会从系统内存中重新读取数据到缓存中。

    相关文章

      网友评论

          本文标题:volatile(2)

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