终于搞清楚了:happen-before原则是干什么的
产生背景:
多核环境下,存在指令重排序。happen-before是指有些情况不能重排序的原则。
为什么要重拍?
因为一个汇编指令也会涉及到很多步骤,每个步骤可能会用到不同的寄存器,例如计算result=A+B,可以分开去取A和B,不需要按顺序去取值,可以并行去取值。
如何禁止重拍,happen-before?
但线程中有些执行顺序是不能乱序执行,必须保证有序性。例如:需要先加锁,后解锁。
因为一个汇编指令也会涉及到很多步骤,每个步骤可能会用到不同的寄存器,现在的CPU一般采用流水线来执行指令,也就是说,CPU有多个功能单元(如获取、解码、运算和结果),一个指令的执行被分成:取指、译码、访存、执行、写回、等若干个阶段,**流水线是并行的, **第一条指令执行还没完毕,就可以执行第二条指令,前提是这两条指令功能单元相同或类似,所以一般可以通过指令重排使得具有相似功能单元的指令接连执行来减少流水线中断的情况。
happen-before是那些原则
1、单线程happen-before原则:
在同一个线程中,书写在前面的操作happen-before后面的操作。
2、锁的happen-before原则:
同一个锁的unlock操作happen-before此锁的lock操作。
3、volatile的happen-before原则:
对一个volatile变量的写操作happen-before对此变量的任意操作(当然也包括写操作了)。
4、happen-before的传递性原则:
如果A操作 happen-before B操作,B操作happen-before C操作,那么A操作happen-before C操作。
5、线程启动的happen-before原则:
同一个线程的start方法happen-before此线程的其它方法。
6、线程中断的happen-before原则:
对线程interrupt方法的调用happen-before被中断线程的检测到中断发送的代码。
7、线程终结的happen-before原则:
线程中的所有操作都happen-before线程的终止检测。
8、对象创建的happen-before原则:
一个对象的初始化完成先于他的finalize方法调用。
终于搞清楚了:happen-before原则是干什么的相关推荐
- 终于搞明白gluPerspective和gluLookAt的关系了
2019独角兽企业重金招聘Python工程师标准>>> 终于搞明白gluPerspective和gluLookAt的关系了 函数原型 gluLookAt(GLdoble eyex,G ...
- 第二天,终于搞定 —— 2014.10.28
npm install 报错 bower ENOGIT git is not installed or not in the PATH 的问题终于搞定. 在angular-phonecat文件夹打开n ...
- 我终于搞清楚了和String有关的那点事儿
转载自 我终于搞清楚了和String有关的那点事儿 String,是Java中除了基本数据类型以外,最为重要的一个类型了.很多人会认为他比较简单.但是和String有关的面试题有很多,下面我随便找 ...
- IntelliJ IDEA 部署 Web 项目,终于搞懂了!
IntelliJ IDEA 部署 Web 项目,终于搞懂了! 这篇牛逼:Java 程序员必备的 Intellij IDEA 插件 IDEA 中最重要的各种设置项,就是这个 Project Struct ...
- python桌面程序打开慢_转 : 终于搞清楚了为什么Java桌面程序总是感觉慢的原因...
终于搞清楚了为什么Java桌面程序总是感觉慢的原因! 按照道理服务器和浏览器都在用脚本和虚拟机,那些不慢,而Java的桌面程序总是感觉响应迟钝呢?主要有两个原因,一是服务器和浏览器都是异步的,提交到渲 ...
- 电压和电流反馈判别及例子,绝对让你通透,其实也没有那么难,一次就看懂!从此终于搞懂了电压反馈和电流反馈!
电压和电流反馈判别及例子,其实也没有那么难,绝对让你通透,一次就看懂!从此终于搞懂了电压反馈和电流反馈! 一个简单粗暴的判断方法: 先看反馈是否直接连到Uo输出端(若不是直接从输出端引出,则为电流反馈 ...
- 终于搞定了stackoverflow的富文本编辑器pagedown
原创不易,转载请注明出处:终于搞定了stackoverflow的富文本编辑器pagedown 这个编辑器在最代码平台上运行了大半年发现确实很多人不喜欢,所以选择了ckedidor 来show下非常符合 ...
- 终于搞定终于搞定linux下阅读pdg(转)
终于搞定终于搞定linux下阅读pdg(转)[@more@]转贴: 许多朋友都下载过PDG格式的文件,也就是超星图书馆的数字图书,这些图书在Windows下可以使用超星图书浏览器方便的阅读,但在Lin ...
- 终于搞清楚了ADO数据库连接中的Persist Security Info参数的作用
终于搞清楚了ADO数据库连接中的Persist Security Info参数的作用 ADO用了这么久,每次用向导创建ADO的数据库连接字符串时总会有产生一个Persist Security Inf ...
- 历经一个月,终于搞定了SVM(支持向量机)-附源代码解析
历经一个月,终于搞定了SVM(支持向量机)-附源代码解析 前言 其实整体算下来,断断续续的也得有快两个月了(原谅博主比较笨).中间也有好几次放弃,不想写这篇总结了,但是之前立下的誓言,要将学习到的每一 ...
最新文章
- 【一张图系列】理解安全上下文
- Vue CLI 3开发中屏蔽烦人的EsLint错误
- apache derby_Apache Derby数据库用户和权限
- cors 前后端分离跨域问题_SpringBoot 实现前后端分离的跨域访问(CORS)
- sklearn.metrics.mean_absolute_error
- powershell快捷键_关于powershell的知识你知道多少呢
- ajax live search,AJAX Live Search
- Pandas 中第二好用的函数是?
- Eclipse的部署项目时的配置
- 打印机的共享设置方法
- 语音广播服务器,智慧校园语音广播说明(二)
- mac下压缩mp3音频文件/linux 适用
- 三维空间中向量的旋转
- FileNotFoundException(io流文件拒绝访问)
- RS-232接口标准(串口)
- 微软云服务器搭建,如何配置云服务(经典) | Microsoft Docs
- 山东大学2019级软件工程应用与实践——基于人工智能的多肽药物分析问题(七)
- 人间炼狱,人性在哪儿---------------- 二十年穿铁衣取胆,母熊含泪杀子并自杀...
- 论文:Discriminative Triad Matching and Reconstruction for Weakly Referring Expression Grounding
- springboot电商系统-生鲜电商-蔬菜商城
热门文章
- mars2d解决底图上下拖动超出边界出现灰色底
- amos看拟合度在哪里看_Amos软件完结篇!模型无法拟合,拟合指标不佳如何解决?...
- 遭遇XP-664129A8.EXE
- mysql 存储过程 if !=_mysql 存储过程 if !=
- python输出偶数_如何用Python 判断奇偶数
- mapgis明码文件转为点线面文件_Geomap格式转化.doc
- [附源码]PHP计算机毕业设计老薛男生服装网(程序+LW)
- 第三方登录/分享最佳实践
- Applet 小应用程序查看器 乱码(小方块)
- c++ 统计指定字母开头单词的数量