zoukankan      html  css  js  c++  java
  • 【高级开发进阶】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的值写入主内存。这个时候问题就出现了,二个线程都把相同的值写入到主内存中,导致二次加一的操作变成了一次。

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

  • 相关阅读:
    leetcode 350. Intersection of Two Arrays II
    leetcode 278. First Bad Version
    leetcode 34. Find First and Last Position of Element in Sorted Array
    leetcode 54. Spiral Matrix
    leetcode 59. Spiral Matrix II
    leetcode 44. Wildcard Matching
    leetcode 10. Regular Expression Matching(正则表达式匹配)
    leetcode 174. Dungeon Game (地下城游戏)
    leetcode 36. Valid Sudoku
    Angular Elements
  • 原文地址:https://www.cnblogs.com/javawxid/p/15644493.html
Copyright © 2011-2022 走看看