天天看點

volatile與barrier指令阻止過度優化

系統的過度優化會給系統帶來不确定性。

volatile可以組織“優化編譯器”的以下優化:

1.變量指派操作的亂序執行

2.變量緩存到寄存器而不及時寫回。

不同體系有不同的barrier指令,用于防止CPU的亂序執行(一個優化系統性能的功能)導緻的程式崩潰。

但是volotile不能解決CPU的亂序執行,是以引入barrier指令,barrier指令要求其之前的指令被執行完後,才能執行後面的指令。例如,一個類的初始化,分為兩步:

(1)配置設定記憶體

(2)排程構造函數

(3)把類對象位址指派給指針

其中第二和第三步是可以亂序執行的。這樣,在單例模式中,很可能在構造函數沒執行完的時候,就把已經被配置設定記憶體的位址指派指針,如果程式這時候操作指針,就會産生不可預計的錯誤。

繼續閱讀