日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

JMM如何解决顺序一致性问题-重排序问题

發(fā)布時(shí)間:2024/4/13 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JMM如何解决顺序一致性问题-重排序问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為了提高程序的執(zhí)行性能,編譯器和處理器都會(huì)對(duì)指令做重排序,其中處理器的重排序在前面已經(jīng)分析過了。所謂的重排序其實(shí)就是指執(zhí)行的指令順序。?

編譯器的重排序指的是程序編寫的指令在編譯之后,指令可能會(huì)產(chǎn)生重排序來優(yōu)化程序的執(zhí)行性能。

從源代碼到最終執(zhí)行的指令,可能會(huì)經(jīng)過三種重排序。

?2和3屬于處理器重排序。這些重排序可能會(huì)導(dǎo)致可見性問題。

編譯器的重排序,JMM提供了禁止特定類型的編譯器重排序。

處理器重排序,JMM會(huì)要求編譯器生成指令時(shí),會(huì)插入內(nèi)存屏障來禁止處理器重排序

當(dāng)然并不是所有的程序都會(huì)出現(xiàn)重排序問題

編譯器的重排序和CPU的重排序的原則一樣,會(huì)遵守?cái)?shù)據(jù)依賴性原則,編譯器和處理器不會(huì)改變存在數(shù)據(jù)依賴關(guān)系的兩個(gè)操作的執(zhí)行順序,比如下面的代碼,

a=1; b=a;?
a=1;a=2;?
a=b;b=1;

這三種情況在單線程里面如果改變代碼的執(zhí)行順序,都會(huì)導(dǎo)致結(jié)果不一致,所以重排序不會(huì)對(duì)這類的指令做優(yōu)化。這種規(guī)則也成為as-if-serial。不管怎么重排序,對(duì)于單個(gè)線程來說執(zhí)行結(jié)果不能改變。比如

int a=2; //1?
int b=3; //2?
int rs=a*b; //3?

1和3、2和3存在數(shù)據(jù)依賴,所以在最終執(zhí)行的指令中,3不能重排序到1和2之前,否則程序會(huì)報(bào)錯(cuò)。由于1和2不存在數(shù)據(jù)依賴,所以可以重新排列1和2的順序

?

總結(jié)

以上是生活随笔為你收集整理的JMM如何解决顺序一致性问题-重排序问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。