zoukankan      html  css  js  c++  java
  • 每日一学--volatile

    volatile作用、特点

    • 线程可见性
      • 一个线程修改了volatile修饰的对象,强制失效其他线程的缓存,必须从主存读取。
      • 原理:
        • lock指令:设置LOCK#信号能保证某个处理器对共享内存的独占使用;
        • 使得本CPU的Cache写入内存,该写入动作也会引起别的CPU cache line invalidate。
        • 所以通过这样一个空操作,可让前面volatile变量的修改对其他CPU立即可见
      • JVM实现:lock指令
      • 处理器实现:缓存一致性协议
    • 禁止指令重排
      • 处理器速度快,内存速度慢;处理器会对没有依赖关系的指令进行重排执行,即不一定会顺序执行;编译器也会有指令重排的实现
      • JVM内存屏障:在普通变量和volatile变量之间插入内存屏障保证顺序执行(lock指令)
      • volatile与普通变量的重排序规则:
        如果第一个操作是volatile读,那无论第二个操作是什么,都不能重排序;
        如果第二个操作是volatile写,那无论第一个操作是什么,都不能重排序;
        如果第一个操作是volatile写,第二个操作是volatile读,那不能重排序。
  • 相关阅读:
    EasyUI tab
    CC和他的AE86
    Spreading the Wealth UVA
    Ultra-QuickSort POJ
    区间完全覆盖问题(贪心)
    Mod Tree HDU
    Snakes and Ladders LightOJ
    There is no SSR CSU
    X问题 HDU
    斐波那契数列
  • 原文地址:https://www.cnblogs.com/wod-Y/p/12891269.html
Copyright © 2011-2022 走看看