• 【高级开发进阶】6.3 Volatile关键字


    学完本章中,读者需要回答:

    1.什么是volatile?

    2.volatile如何使用?

    3.  volatile的几个特性,如何解决volatile不保证原子性?

     

    6.3.1  JMM Volatile 缓存一致性协议

    当程序在运行过程中,计算机会将运算需要的数据(变量)从主内存复制一份到CPU高速缓存中,那么CPU进行运算的时候就可以从它的高速缓存读取和写入数据,当运算结束后,再将已经修改后的数据(变量)刷新重新写回到主存当中。这种情况在单线程中运行时没有任何问题的,但是在多线程中运行就会有问题了。

    以多核CPU为例,现在有二个线程,一个线程A,一个线程B,主内存中有一个值为1的变量C。这二个线程都要进行赋值加一的操作。线程A从主内存中复制主内存中的变量C,线程B同样的从主内存中复制一份变量C,这个时候二个线程都有一份值为1的变量,同时进行加一的操作。把线程A的最新值2写入到主内存中。此时线程B的高速缓存当中变量C的值还是1,进行加1操作后,变量C的值为2,然后线程B把变量C的值写入主内存。这个时候问题就出现了,二个线程都把相同的值写入到主内存中,导致二次加一的操作变成了一次。

    所以就出现了缓存一致性协议,这个协议保证了每个缓存(每个线程的私有的工作空间

  • 相关阅读:
    搭建UEFI PXE 基于linux相关资料
    SLES 搭建dhcp6服务器
    SUSE Linux 11架设Apache虚拟主机
    Virtualbox 安装SLES11 SP4系统后安装Guest Additions
    centos7 安装wireshark
    RHEL7.x 安装virtualbox增强组件
    Readhat 7.x禁用防火墙
    Debian普通用户添加sudo权限
    Virtualbox 错误提示"VT-x is not available (VERR_VMX_NO_VMX)"解决办法
    VNC 下载地址和key
  • 原文地址:https://www.cnblogs.com/javawxid/p/15644493.html
Copyright © 2020-2023  润新知