`
y806839048
  • 浏览: 1092293 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

volatile的一致性思路

阅读更多

 

 

volatile---内存锁,cpu对内存的操作权

 

sychronized---java线程锁

 

工作区--各个cpu,主存区--系统内存

一个工作区有变化会修改主存区,导致其他的工作区该内存地址被修改--就看成无效,其他工作区会嗅探系统内存有没有变化,然后修正在工作区指向地址

遇到volatile就编译的时候,出现lock字段,其他cpu不可处理,此cpu独占,占有cpu处理之后就会使其他cpu缓存失效,其他cpu嗅探到之后就会更新

 

已存在cpu缓存内部就不lock,已被修改就其他cpu缓存地址,其他cpu就知道失效失效,更新

 

处理器为了提高处理速度,不直接和内存进行通讯,而是先将系统内存的数据读到内部缓存(L1,L2或其他)后再进行操作,但操作完之后不知道何时会写到内存,

如果对声明了Volatile变量进行写操作,JVM就会向处理器发送一条Lock前缀的指令,将这个变量所在缓存行的数据写回到系统内存。但是就算写回到内存,

如果其他处理器缓存的值还是旧的,再执行计算操作就会有问题,所以在多处理器下,为了保证各个处理器的缓存是一致的,就会实现缓存一致性协议,

每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期了,当处理器发现自己缓存行对应的内存地址被修改,就会将当前处理器的缓存行设置成无效状态,

当处理器要对这个数据进行修改操作的时候,会强制重新从系统内存里把数据读到处理器缓存里。

 

 

https://www.cnblogs.com/awkflf11/p/9218414.html

分享到:
评论

相关推荐

    从汇编角度理解volatile

    一般对于volatile的解释是这样的:将变量定义为volatile可以防止编译器对变量进行优化,每次均从内存中访问变量,而不是寄存器。既然让编译器优化可以提高访问速度,那为什么又要不用它以及什么时候不用它?其实主要...

    Volatile详解,深入学习Volatile

    详细说明 并举例说明了VOlatile的作用及用法,特别是嵌入式程序员要注意的

    JVM基础.doc

    • 基于MESI缓存⼀一致性协议 如果不声明volatile,变量装载到本地变量 中,或者cpu cache中,多线程下很容易导 致状态不⼀一致。 • 声明了volatile,每次访问的都是主存中的数 据,⼀一致性能提升,但是还是不可靠...

    (*(volatile unsigned long *)详解

    从上述分析可以看出,`volatile`关键字在嵌入式系统开发中扮演着非常重要的角色,它可以确保程序的正确运行和数据的一致性。 对于`(volatile unsigned char *)0x20`这种写法,我们可以分析出它是由两部分组成的:...

    Java volatile与AQS锁内存可见性

    从JUC中的AQS引入,讲解Java volatile与AQS锁内存可见性

    java volatile 关键字实战

    java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...

    C语言中关键字volatile的作用

    C语言中关键字volatile的作用,使用说明和例子

    const和volatile分析

    const和volatile分析 这个分析得很好 面试 找工作 必备的

    volatile的用法讲解

    volatile的用法讲解,讲得很详细,希望能帮助到大家

    volatile的使用

    一般说来,volatile用在如下的几个地方: 1、中断服务程序中修改的供其它程序检测的变量... 另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实

    volatile的用法

    volatile的用法,在写代码正确使用volatile,正确理解volatile的用法,增强代码的健壮性

    C#中volatile与lock用法

    多个线程同时访问一个变量,CLR为了效率,允许每个线程进行本地缓存,这就导致了变量的不一致性。volatile就是为了解决这个问题,volatile修饰的变量,不允许线程进行本地缓存,每个线程的读写都是直接操作在共享...

    C++ volatile 详解

    可以看到,在使用 volatile 关键字后,输出结果是一致的,这是因为 volatile 关键字确保了变量的值总是从内存中读取,而不是从寄存器或缓存中读取。 结论 volatile 关键字是 C++ 语言中的一种类型修饰符,用于防止...

    volatile与synchronized的区别

    volatile与synchronized的区别,锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)

    Java线程:volatile关键字

    主要讲述java线程volatile关键字

    volatile用法

    c语言下关键字的volatile用法,包含一些基本例子

    volatile的使用方法

    C程序中volatile关键字的使用.方法及其例程介绍。

    volatile变量详解

    容易忽略的变量声明,但是很重要 volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.

    extern_volatile等修饰符的用法

    "extern_volatile等修饰符的用法" 在C++语言中,extern、volatile、const、static等...extern、volatile、const、static等修饰符都是C++语言中的重要组成部分,正确使用它们可以提高代码的可读性、安全性和可维护性。

    volatile源码分析1

    前言Java中volatile这个热门的关键字,在面试中经常会被提及,在各种技术交流群中也经常被讨论,但似乎讨论不出一个完美的结果,带着种种疑惑,准备从JVM、

Global site tag (gtag.js) - Google Analytics