时间:2021-05-19
在接下来的叙述里我首先会说明happens-before规则是干什么用的,然后用一个简单的小程序说明happens-before规则
一、happens-before规则
我们编写的程序都要经过优化后(编译器和处理器会对我们的程序进行优化以提高运行效率)才会被运行,优化分为很多种,其中有一种优化叫做重排序,重排序需要遵守happens-before规则,不能说你想怎么排就怎么排,如果那样岂不是乱了套。
happens-before部分规则如下:
1、程序顺序规则:一个线程中的每个操作happens-before于该线程中的任意后续操作
2、监视器锁(同步)规则:对于一个监视器的解锁,happens-before于随后对这个监视器的加锁
注1:为什么是部分happens-before原则,因为这篇文章是让你理解happens-before原则,我会尽量让你专注在这件事情上不被其他的所影响
注2:程序顺序规则中所说的每个操作happens-before于该线程中的任意后续操作并不是说前一个操作必须要在后一个操作之前执行,而是指前一个操作的执行结果必须对后一个操作可见,如果不满足这个要求那就不允许这两个操作进行重排序
二、例:下面的方法的功能是计算一个长方形面积
public double rectangleArea(double length , double width){double leng;double wid;leng=length;//Awid=width;//Bdouble area=leng*wid;//Creturn area;}上面的操作在运行之前编译器和处理器可能会进行优化
在程序中
A happens-before B
B happens-before C
A happens-before C //happens-before具有传递规则
根据happens-before规则我们来分析重排序后可能产生的结果
因为A happens-before B,所以A操作产生的结果leng一定要对B操作可见,但是现在B操作并没有用到length,所以这两个操作可以重排序,那A操作是否可以和C操作重排序呢,如果A操作和C操作进行了重排序,因为leng没有被赋值,所以leng=0,area=0*wid也就是area=0;这个结果显然是错误的,所以A操作是不能和C操作进行重排序的(这就是注2中说的前一个操作的执行结果必须对后羿操作可见,如果不满足这个要求就不允许这两个操作进行重排序)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文主要是对flask中的before_request与after_request用法做一个简单的分析,具体实例和介绍如下。使用before_request和a
针对用户的需求,在设计Web前端应用界面时需要充分考虑Web界面元素的根本需求,在Web前端设计开发中要本着用户简单易懂的原则,尽可能地将Web界面的各项功能设
用最简单的方法,通俗易懂的方法计算结构体大小。结构体计算要遵循字节对齐原则。结构体默认的字节对齐一般满足三个准则:1)结构体变量的首地址能够被其最宽基本类型成员
通过优化的网站在哪些搜索引擎中可以提升排名?如果你的网站是采用简单易懂的设计原则来设计的,那么你的网站经过排名优化后,可以在大部分搜索引擎1中得到排名提升。但因
决定一家店铺成败的先行要素莫过于选址。今天,云掌柜给大家分享一篇图文结合、简单易懂的选址秘诀——选址9大黄金原则1、在聚客点附近开店聚客点就是能够把人集中在一起