系統的過度優化會給系統帶來不确定性。
volatile可以組織“優化編譯器”的以下優化:
1.變量指派操作的亂序執行
2.變量緩存到寄存器而不及時寫回。
不同體系有不同的barrier指令,用于防止CPU的亂序執行(一個優化系統性能的功能)導緻的程式崩潰。
但是volotile不能解決CPU的亂序執行,是以引入barrier指令,barrier指令要求其之前的指令被執行完後,才能執行後面的指令。例如,一個類的初始化,分為兩步:
(1)配置設定記憶體
(2)排程構造函數
(3)把類對象位址指派給指針
其中第二和第三步是可以亂序執行的。這樣,在單例模式中,很可能在構造函數沒執行完的時候,就把已經被配置設定記憶體的位址指派指針,如果程式這時候操作指針,就會産生不可預計的錯誤。