Java并發(fā)編程的藝術(shù)》 —3.2.4 重排序?qū)Χ嗑€程的影響

      網(wǎng)友投稿 742 2025-04-02

      3.2.4 重排序?qū)Χ嗑€程的影響


      現(xiàn)在讓我們來看看,重排序是否會改變多線程程序的執(zhí)行結(jié)果。請看下面的示例代碼。

      class ReorderExample {

      int a = 0;

      boolean flag = false;

      public void writer() {

      a = 1;?????????????? // 1

      flag = true;???????????? // 2

      }

      Public void reader() {

      if (flag) {?????????? // 3

      int i =? a * a; // 4

      ……

      }

      }

      }

      flag變量是個標記,用來標識變量a是否已被寫入。這里假設(shè)有兩個線程A和B,A首先執(zhí)行writer()方法,隨后B線程接著執(zhí)行reader()方法。線程B在執(zhí)行操作4時,能否看到線程A在操作1對共享變量a的寫入呢?

      答案是:不一定能看到。

      《Java并發(fā)編程的藝術(shù)》 —3.2.4 重排序?qū)Χ嗑€程的影響

      由于操作1和操作2沒有數(shù)據(jù)依賴關(guān)系,編譯器和處理器可以對這兩個操作重排序;同樣,操作3和操作4沒有數(shù)據(jù)依賴關(guān)系,編譯器和處理器也可以對這兩個操作重排序。讓我們先來看看,當操作1和操作2重排序時,可能會產(chǎn)生什么效果?請看下面的程序執(zhí)行時序圖,如圖3-8所示。

      圖3-8 程序執(zhí)行時序圖

      如圖3-8所示,操作1和操作2做了重排序。程序執(zhí)行時,線程A首先寫標記變量flag,隨后線程B讀這個變量。由于條件判斷為真,線程B將讀取變量a。此時,變量a還沒有被線程A寫入,在這里多線程程序的語義被重排序破壞了!

      本文統(tǒng)一用虛箭線標識錯誤的讀操作,用實箭線標識正確的讀操作。

      下面再讓我們看看,當操作3和操作4重排序時會產(chǎn)生什么效果(借助這個重排序,可以順便說明控制依賴性)。下面是操作3和操作4重排序后,程序執(zhí)行的時序圖,如圖3-9所示。

      圖3-9 程序的執(zhí)行時序圖

      在程序中,操作3和操作4存在控制依賴關(guān)系。當代碼中存在控制依賴性時,會影響指令序列執(zhí)行的并行度。為此,編譯器和處理器會采用猜測(Speculation)執(zhí)行來克服控制相關(guān)性對并行度的影響。以處理器的猜測執(zhí)行為例,執(zhí)行線程B的處理器可以提前讀取并計算a*a,然后把計算結(jié)果臨時保存到一個名為重排序緩沖(Reorder Buffer,ROB)的硬件緩存中。當操作3的條件判斷為真時,就把該計算結(jié)果寫入變量i中。

      從圖3-9中我們可以看出,猜測執(zhí)行實質(zhì)上對操作3和4做了重排序。重排序在這里破壞了多線程程序的語義!

      在單線程程序中,對存在控制依賴的操作重排序,不會改變執(zhí)行結(jié)果(這也是as-if-serial語義允許對存在控制依賴的操作做重排序的原因);但在多線程程序中,對存在控制依賴的操作重排序,可能會改變程序的執(zhí)行結(jié)果。

      Java 任務(wù)調(diào)度

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:怎樣excel表格轉(zhuǎn)成word文檔(excel表格如何轉(zhuǎn)為word文檔)
      下一篇:[Java][華為云Java編程創(chuàng)造營][學(xué)習(xí)筆記][第三階段][04_Java爬蟲實戰(zhàn)][二]
      相關(guān)文章
      亚洲AV日韩AV高潮无码专区| 亚洲va无码专区国产乱码| 日产亚洲一区二区三区| 亚洲午夜久久久影院伊人| 亚洲色图综合在线| 亚洲成A人片在线观看无码3D| 亚洲精品无码av中文字幕| 亚洲一日韩欧美中文字幕在线| 亚洲黄色激情视频| 亚洲综合小说另类图片动图| 国产精品亚洲精品青青青| 国产成人亚洲合集青青草原精品| 亚洲一区中文字幕在线观看| 亚洲国产视频一区| 激情五月亚洲色图| 亚洲日本VA中文字幕久久道具| 亚洲精品久久久久无码AV片软件| 亚洲日韩亚洲另类激情文学| 亚洲成AV人片高潮喷水| 自拍偷自拍亚洲精品播放| 国产亚洲Av综合人人澡精品| 亚洲精品线路一在线观看| 亚洲综合色区在线观看| 亚洲日韩中文字幕在线播放| 在线播放亚洲第一字幕| 九月丁香婷婷亚洲综合色| 亚洲国产成人久久精品影视| 亚洲黄色片免费看| 亚洲人妖女同在线播放| 亚洲色一区二区三区四区| 亚洲?v无码国产在丝袜线观看| 亚洲情侣偷拍精品| 亚洲AV一宅男色影视| 91亚洲一区二区在线观看不卡| 亚洲国产精品yw在线观看| 亚洲欧美成aⅴ人在线观看| 亚洲精品无码久久久久秋霞 | 亚洲综合成人婷婷五月网址| 亚洲欧美日韩中文二区| 亚洲人成电影网站色www| 午夜亚洲av永久无码精品|