一次討論volatile指令重排引發的經歷

2021-10-01 06:10:13 字數 2280 閱讀 9975

public

class

tcatch (exception e)

// i++;

} system.out.

println

("m end");

}public

static

void

main

(string[

] args)

catch

(exception e)

t.runing =

false;}

}

結果會:我一直以為,時間片輪詢,遲早runing會重新整理到主存,只是有延遲。而volatile會立即重新整理到快取。沒想到結果是程式根本不會停止。

}到了時間節點上,時間同步成功突然出現意外,程式結束了:

}結果程式不會結束了。

}結果又會:

總結:為什麼會產生這種奇怪的事件呢?

(1)第1段**:因為裡面沒有幹其他事,所有while不會讓出時間片,也不會將主存中的runing標誌重新整理到自己的執行緒中。

(2)第2段**:println的原始碼會呼叫如下**段:

private

void

write

(string s)

}catch

(interruptedioexception x)

catch

(ioexception x)

}

於是,println方法通過synchronized的可見性造成了上面的結果。

(3)第3段**:理所當然也遇到了與第1段**相似的經歷

(4)第4段**:呼叫sleep**,cup重新進入**。發現變成了false(ps:純屬個人理解

第一次討論

昨天qq上交流了一下找到的開發板,感覺單獨購買工控板和螢幕實在是麻煩,於是想到直接買帶螢幕的學習板,要貴一些但是簡便了很多。一般的學習板上提供了溫度感測器的介面,但是均沒有提供重量感測器的介面,今天出來吃飯的時候問了一下c,他說可以直接購買轉換器或者自己寫程式進去,看他的意思好像寫程式不太容易,直接...

第一次的討論

專案上少有的討論,雖然人數少了一些,不過對當前專案總結多了不少,也有一些感悟,應該用點時間,放下心來,去好好思考與消化專案的東西了,把學到的東西用出來,那才是真正屬於自己的.今天的討論挺有意義.發現了自己乙個要改的缺點,對自己第一感覺不喜歡的東西,都會強制著,讓自己一直不喜歡下去,還是要改改咯,多一...

Volatile如何保證有序性(禁止指令重排)

volatile如何保證有序性 禁止指令重排 1.首先我們要了解計算機在執行程式時,為了提高效能,編譯器和處理器一般都會對指令做重排,一般分為以下三種 單執行緒環境裡面確保程式最終執行的結果和 順序執行的結果一致。處理器在進行指令重排時必須要考慮指令之間的資料依賴性。多執行緒環境中線程交替執行,由於...