Java多线程系列-happens-before规则和as-if-serial语义
来源:互联网 发布:linux vi移到行尾 编辑:程序博客网 时间:2024/06/05 21:00
JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,
那么这2个操作之间必须要存在happens-before关系。这里提到的2个操作既可以是一个线程之内,也可以是不同线程之间。
与程序员密切相关的happens-before规则如下:1、程序顺序规则:一个线程中的每个操作,happens-before于线程中的任意后续操作。
2、监视器锁规则:一个锁的解锁,happens-before于随后对这个锁的加锁。
3、volatile变量规则:对一个volatile域的写,happens-before于任意后续对这个volatile域的读。
4、传递性:如果A happens-before B,且Bhappens-before C,那么Ahappens-before C。
需要注意的是:
两个操作之间具有happens-before关系,并不意味着前一个操作必须要在后一个操作之前执行!
happens-before仅仅要求前一个操作(执行的结果)对后一个操作可见,且前一个操作按顺序排在第
二个操作之前。
一个happens-before规则对应一个或多个编译器和处理器重排序规则。对于Java程序员来说,
happens-before规则简单易懂,它避免Java程序员为了理解JMM提供的内存可见性保证而去
学习复杂的重排序以及这些规则的具体实现方法。
as-if-serial语义
as-if-serial语义的意思是:不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不会改变。
编译器、runtime和处理器都必须遵守as-if-serial语义。
为了遵守as-if-serial语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改变执行结果。
但是,如果操作之间不存在数据依赖关系,这些操作就可能被编译器和处理器重排序。
阅读全文
0 0
- Java多线程系列-happens-before规则和as-if-serial语义
- happens-before规则和as-if-serial语义
- JAVA多线程系列--指令重排和happens-before规则
- 多线程 happens-before规则
- Java多线程--happens-before
- Java多线程--As-if-sreial语义
- java多线程之happens-before
- Java并发----ConcurrentHashMap01--(Happens-Before规则)
- happens-before规则解析
- happens-before规则
- happens-before的规则
- Java重排序和happens-before原则
- 指令重排、happens-before规则
- ConcurrentHashMap01--(Happens-Before规则)
- Java Happens-before法则
- java-多线程深入(三)happens-before介绍
- Java多线程:volatile变量、happens-before关系及内存一致性
- Java并发编程系列之五:happens-before原则
- 移动优先的跨终端web概述
- Linux网络编程——tcp并发服务器(I/O复用之select
- linux下devicetree中惯用的of函数
- POJ 3162 Walking Race 树的直径+线段树
- HDOJ2639(01背包第k最优解模板题)
- Java多线程系列-happens-before规则和as-if-serial语义
- LeetCode——152. Maximum Product Subarray
- 学习中遇到的中文乱码问题。
- 【SSLGZ 2793】2017年10月26日提高组T2 Deep(博弈)
- Django基本命令 静态文件配置 笔记
- codevs 1052 地鼠游戏 贪心
- 宿主机 Navicat 连接VMware Ubuntu 虚拟机 的MySQL 实现方法
- 第一天
- 627.SWAP Salary