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

目录
相关文章
|
缓存
指令重排序的探讨
指令重排序是现代处理器为了提高指令级并行性和性能而进行的一种优化技术。在高并发场景下,指令重排序可能会引发一些问题,本文将详细介绍指令重排序的概念、原因、影响以及如何解决这些问题。
180 0
|
6月前
|
编译器
volatile是如何禁止指令进行重排序的
volatile是如何禁止指令进行重排序的
|
6月前
|
缓存 Java 编译器
关于volatile与指令重排序的探讨
关于volatile与指令重排序的探讨
77 1
|
6月前
|
存储 缓存 安全
Java并发基础之互斥同步、非阻塞同步、指令重排与volatile
在Java中,多线程编程常常涉及到共享数据的访问,这时候就需要考虑线程安全问题。Java提供了多种机制来实现线程安全,其中包括互斥同步(Mutex Synchronization)、非阻塞同步(Non-blocking Synchronization)、以及volatile关键字等。 互斥同步(Mutex Synchronization) 互斥同步是一种基本的同步手段,它要求在任何时刻,只有一个线程可以执行某个方法或某个代码块,其他线程必须等待。Java中的synchronized关键字就是实现互斥同步的常用手段。当一个线程进入一个synchronized方法或代码块时,它需要先获得锁,如果
57 0
|
6月前
|
Java 编译器 程序员
【面试问题】什么是指令重排?
【1月更文挑战第27天】【面试问题】什么是指令重排?
|
6月前
|
Java
6.什么是内存屏障?具有什么作用?
6.什么是内存屏障?具有什么作用?
86 0
6.什么是内存屏障?具有什么作用?
|
编译器
什么是指令重排序?
什么是指令重排序?
什么是指令重排序?
|
存储 缓存 Java
关于缓存一致性协议、MESI、StoreBuffer、InvalidateQueue、内存屏障、Lock指令和JMM的那点事
关于缓存一致性协议、MESI、StoreBuffer、InvalidateQueue、内存屏障、Lock指令和JMM的那点事
347 0
|
缓存 编译器 C语言
指令重排序与内存屏障
指令重排序与内存屏障
273 0
指令重排序与内存屏障