volatile的指令禁重排(六)

简介: volatile的指令禁重排

volatile的指令禁重排

重排序

image.png

案例

image.png

volatile有关的禁止指令重排的行为

image.png

四大屏障的插入情况

  1. 在每一个volatile写操作前面插入一个storestore屏障,storestore屏障可以保证在volatile写之前,其前面的所有普通写操作都已经刷新到主内存。
  2. 在每一个volatile写操作后面插入一个storeload屏障,storeload屏障的作用是避免volatile写与后边的有可能的volatile读写操作重排序。
  3. 在每一个volatile读操作后面插入一个loadload屏障,loadload屏障用来禁止把上边的volatile读与下边的普通读重排序。
  4. 在每一个volatile读操作后面插入一个loadstore屏障,loadstore屏障用来禁止处理器吧上面的volatile读与下面的普通读重排序。

案例

image.png

案例说明

image.png

目录
相关文章
|
6月前
|
存储 缓存 安全
JMM学习笔记(二) 规则和volatile
JMM学习笔记(二) 规则和volatile
|
6月前
|
编译器 C++
理解内存序,指令重排与内存模型
理解内存序,指令重排与内存模型
99 0
|
缓存
指令重排序的探讨
指令重排序是现代处理器为了提高指令级并行性和性能而进行的一种优化技术。在高并发场景下,指令重排序可能会引发一些问题,本文将详细介绍指令重排序的概念、原因、影响以及如何解决这些问题。
184 0
|
6月前
|
编译器
volatile是如何禁止指令进行重排序的
volatile是如何禁止指令进行重排序的
|
6月前
|
缓存 Java 编译器
关于volatile与指令重排序的探讨
关于volatile与指令重排序的探讨
80 1
|
6月前
|
Java 编译器 开发者
为什么代码会重排序
在并发编程中,重排序是一项为了提高性能而进行的优化策略。理解重排序的原理和可能引发的问题对于编写高效且正确的多线程代码至关重要。Java提供了一些机制,如内存屏障,来帮助开发者在多线程环境下保持程序的正确性和可靠性。
64 0
|
6月前
|
Java 编译器 程序员
【面试问题】什么是指令重排?
【1月更文挑战第27天】【面试问题】什么是指令重排?
|
6月前
|
Java
6.什么是内存屏障?具有什么作用?
6.什么是内存屏障?具有什么作用?
92 0
6.什么是内存屏障?具有什么作用?
|
Kubernetes API 容器
2022-10-13-k8s的操作指令
2022-10-13-k8s的操作指令
101 0
|
编译器
什么是指令重排序?
什么是指令重排序?
什么是指令重排序?