电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java volatile如何實現禁止指令重排

瀏覽:33日期:2022-08-21 15:14:33

計算機在執行程序時,為了提高性能,編譯器和處理器常常會對指令重排,一般分為以下三種:

源代碼 -> 編譯器優化的重排 -> 指令并行的重排 -> 內存系統的重排 -> 最終執行指令

單線程環境里面確保最終執行結果和代碼順序的結果一致

處理器在進行重排序時,必須要考慮指令之間的數據依賴性

多線程環境中線程交替執行,由于編譯器優化重排的存在,兩個線程中使用的變量能否保證一致性是無法確定的,結果無法預測。

指令重排 - example 1

public void mySort() {int x = 11;int y = 12;x = x + 5;y = x * x;}

按照正常單線程環境,執行順序是 1 2 3 4

但是在多線程環境下,可能出現以下的順序:

2 1 3 4

1 3 2 4

上述的過程就可以當做是指令的重排,即內部執行順序,和我們的代碼順序不一樣

但是指令重排也是有限制的,即不會出現下面的順序

4 3 2 1

因為處理器在進行重排時候,必須考慮到指令之間的數據依賴性

因為步驟 4:需要依賴于 y的申明,以及x的申明,故因為存在數據依賴,無法首先執行

例子

int a,b,x,y = 0

線程1 線程2 x = a; y = b; b = 1; a = 2; x = 0; y = 0

因為上面的代碼,不存在數據的依賴性,因此編譯器可能對數據進行重排

線程1 線程2 b = 1; a = 2; x = a; y = b; x = 2; y = 1

這樣造成的結果,和最開始的就不一致了,這就是導致重排后,結果和最開始的不一樣,因此為了防止這種結果出現,volatile就規定禁止指令重排,為了保證數據的一致性

指令重排 - example 2

比如下面這段代碼

public class ResortSeqDemo { int a= 0; boolean flag = false; public void method01() { a = 1; flag = true; } public void method02() { if(flag) { a = a + 5; System.out.println('reValue:' + a); } }}

我們按照正常的順序,分別調用method01() 和 method02() 那么,最終輸出就是 a = 6

但是如果在多線程環境下,因為方法1 和 方法2,他們之間不能存在數據依賴的問題,因此原先的順序可能是

a = 1;flag = true;

a = a + 5;System.out.println('reValue:' + a);

但是在經過編譯器,指令,或者內存的重排后,可能會出現這樣的情況

flag = true;

a = a + 5;System.out.println('reValue:' + a);

a = 1;

也就是先執行 flag = true后,另外一個線程馬上調用方法2,滿足 flag的判斷,最終讓a + 5,結果為5,這樣同樣出現了數據不一致的問題

為什么會出現這個結果:多線程環境中線程交替執行,由于編譯器優化重排的存在,兩個線程中使用的變量能否保證一致性是無法確定的,結果無法預測。

這樣就需要通過volatile來修飾,來保證線程安全性

Volatile針對指令重排做了啥

Volatile實現禁止指令重排優化,從而避免了多線程環境下程序出現亂序執行的現象

首先了解一個概念,內存屏障(Memory Barrier)又稱內存柵欄,是一個CPU指令,它的作用有兩個:

保證特定操作的順序保證某些變量的內存可見性(利用該特性實現volatile的內存可見性)

由于編譯器和處理器都能執行指令重排的優化,如果在指令鍵插入一條Memory Barrier則會告訴編譯器和CPU,不管什么指令都不能和這條Memory Barrier指令重排序,也就是說,通過插入內存屏障前后的指令執行重排序優化。內存屏障另外一個作用是刷新出各種CPU的緩存數,因此任何cpu上的線程都能讀取到這些數據的最新版本

Java volatile如何實現禁止指令重排

也就是在Volatile的寫和讀的時候,加入屏障,防止出現指令重排線程安全得到保證

工作內存與主內存同步延遲現象導致的可見性問題

可以使用synchronized或volatile關鍵字解決,它們都可以使得一個線程修改后的變量立即對其他線程可見。 對于指令重排導致的可見性問題和有序性問題 可以利用volatile關鍵字解決,因為volatile的另一個作用就是禁止重排序優化。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 选矿设备-新型重选设备-金属矿尾矿重选-青州冠诚重工机械有限公司 | 高楼航空障碍灯厂家哪家好_航空障碍灯厂家_广州北斗星障碍灯有限公司 | 层流手术室净化装修-检验科ICU改造施工-华锐净化工程-特殊科室建设厂家 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 压力变送器-上海武锐自动化设备有限公司| uv机-uv灯-uvled光固化机-生产厂家-蓝盾机电 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 升降机-高空作业车租赁-蜘蛛车-曲臂式伸缩臂剪叉式液压升降平台-脚手架-【普雷斯特公司厂家】 | 口臭的治疗方法,口臭怎么办,怎么除口臭,口臭的原因-口臭治疗网 | 釜溪印象网络 - Powered by Discuz! | 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 陕西自考报名_陕西自学考试网| 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 内窥镜-工业内窥镜厂家【上海修远仪器仪表有限公司】 | 论文查重_免费论文查重_知网学术不端论文查重检测系统入口_论文查重软件 | 施工电梯_齿条货梯_烟囱电梯_物料提升机-河南大诚机械制造有限公司 | 翅片管散热器价格_钢制暖气片报价_钢制板式散热器厂家「河北冀春暖气片有限公司」 | 大型冰雕-景区冰雕展制作公司,3D创意设计源头厂家-[赛北冰雕] | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 伸缩节_伸缩器_传力接头_伸缩接头_巩义市联通管道厂 | 开云(中国)Kaiyun·官方网站-登录入口| 缠绕机|缠绕膜包装机|缠绕包装机-上海晏陵智能设备有限公司 | 干培两用箱-细菌恒温培养箱-菲斯福仪器| 悬浮拼装地板_幼儿园_篮球场_悬浮拼接地板-山东悬浮拼装地板厂家 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 复盛空压机配件-空气压缩机-复盛空压机(华北)总代理 | 模具ERP_模具管理系统_模具mes_模具进度管理_东莞市精纬软件有限公司 | 河南凯邦机械制造有限公司| 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | 锂电池砂磨机|石墨烯砂磨机|碳纳米管砂磨机-常州市奥能达机械设备有限公司 | 东莞市超赞电子科技有限公司 全系列直插/贴片铝电解电容,电解电容,电容器 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 智慧物联网行业一站式解决方案提供商-北京东成基业 | 专注提供国外机电设备及配件-工业控制领域一站式服务商-深圳市华联欧国际贸易有限公司 |