• volatile



    关于volatile的理解
    作用:1.保证变量在内存中对线程的可见性,2.禁止指令重排
    volatile保证变量在内存中对线程的可见性
    volatile只保证可见性,不保证原子性

    指令重排(在保证不影响结果的前提下,将某些代码乱序执行)

    Java代码明明是从上往下依次执行,为什么会出现指令重排这个问题?
    并发编程中,cpu自身和虚拟机为了提高执行效率,你写的代码顺序对于jvm来说,不一定是最优执行顺序,
    jvm在编译后会对代码进行重排,在不影响结果的前提下,有些比较费内存的代码就得放后面,
    效率高的代码就会放前面,这样就发生了指令重排,说白了,就是单纯的为了,提高整个栈帧的执行效

    在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,
    它需要满足以下两个条件: 在单线程环境下不能改变程序运行的结果;存在数据依赖关系的不允许重排序需要注意的是:
    重排序不会影响单线程环境的执行结果,但是会破坏多线程的执行语义。

    存在指令重排是cpu为了提高单线程的程序执行效率而作的优化,但是对于多线程环境来说,会出现线程安全问题,所以通过volatile来解决

  • 相关阅读:
    arm gdbserver armlinuxgdb
    建立非模态对话框与在线程中建立非模态对话框
    AutoLock C++
    Uboot bootcmd 和bootargs
    SetRegistryKey
    飞凌OK6410 uboot支持网络
    uboot 源码修改 bootcmd,IP ,BOOTARGS等参数
    TextBox(richTextBox) 光标和滚动条到文本末尾
    Windbg中使用查找内存并设置访问断点
    opencv EXAMPLES 编译 VS2010 (C++)
  • 原文地址:https://www.cnblogs.com/xiaolige/p/15871542.html
Copyright © 2020-2023  润新知