Juc12_Volatile的可见性、不保证可见性、有序性、使用、内存屏障四大指令StoreStore、StoreLoad 、LoadLoad、LoadStore(二)

简介: ③. happens-before之volatile变量规则④. JMM 就将内存屏障插⼊策略分为4种

③. happens-before之volatile变量规则


①.当第一个操作为volatile读时,不论第二个操作是什么,都不能重排序。这个操作保证了volatile读之后的操作不会被重排到volatile读之前


②.当第二个操作为volatile写时,不论第一个操作是什么,都不能重排序。这个操作保证了volatile写之前的操作不会被重排到volatile写之后


③.当第一个操作为volatile写时,第二个操作为volatile读时,不能重排


微信图片_20220108124503.png


④. JMM 就将内存屏障插⼊策略分为4种


  • ①. 写
    在每个volatile写操作的前⾯插⼊⼀个StoreStore屏障


在每个volatile写操作的后⾯插⼊⼀个StoreLoad屏障


微信图片_20220108124521.png


②. 读

在每个volatile读操作的后⾯插⼊⼀个LoadLoad屏障

在每个volatile读操作的后⾯插⼊⼀个LoadStore屏障


微信图片_20220108124544.png


③. 代码展示


//模拟一个单线程,什么顺序读?什么顺序写?
public class VolatileTest {
    int i = 0;
    volatile boolean flag = false;
    public void write(){
        i = 2;
        flag = true;
    }
    public void read(){
        if(flag){
            System.out.println("---i = " + i);
        }
    }
}


微信图片_20220108124604.png

相关文章
|
6月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
102 1
|
7月前
|
存储 程序员 数据处理
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
754 1
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
|
7月前
|
存储
【汇编】数据在哪里?有多长、div指令实现除法、dup设置内存空间
【汇编】数据在哪里?有多长、div指令实现除法、dup设置内存空间
142 1
|
缓存 安全 Java
volatile底层的实现原理:volatile关键字的作用、内存模型、JMM规范和CPU指令
volatile底层的实现原理:volatile关键字的作用、内存模型、JMM规范和CPU指令
166 0
持久内存指令(PMDK)简介
持久内存指令(PMDK)简介
330 0
|
存储 安全
4.3 x64dbg 搜索内存可利用指令
发现漏洞的第一步则是需要寻找到可利用的反汇编指令片段,在某些时候远程缓冲区溢出需要通过类似于`jmp esp`等特定的反汇编指令实现跳转功能,并以此来执行布置好的`ShellCode`恶意代码片段,`LyScript`插件则可以很好的完成对当前进程内存中特定函数的检索工作。在远程缓冲区溢出攻击中,攻击者也可以利用汇编指令`jmp esp`来实现对攻击代码的执行。该指令允许攻击者跳转到堆栈中的任意位置,并从那里执行恶意代码。
200 0
|
存储 缓存 索引
通过地址和索引实现数组、CPU指令执行过程、内存概述及内存物理结构
通过地址和索引实现数组、CPU指令执行过程、内存概述及内存物理结构
112 0
|
前端开发 rax
实验一:查看CPU和内存,用机器指令和汇编指令编程
实验一:查看CPU和内存,用机器指令和汇编指令编程
209 0
|
存储 缓存 数据库
PPC902AE101 3BHE010751R0101 访问指令来增加CPU内存子系统的带宽
PPC902AE101 3BHE010751R0101 访问指令来增加CPU内存子系统的带宽
122 0
PPC902AE101 3BHE010751R0101 访问指令来增加CPU内存子系统的带宽
|
安全 Java 编译器
【JavaEE】并发编程(多线程)线程安全问题&内存可见性&指令重排序
【JavaEE】并发编程(多线程)线程安全问题&内存可见性&指令重排序
【JavaEE】并发编程(多线程)线程安全问题&内存可见性&指令重排序