1. 程式人生 > >18.1 volatile的作用

18.1 volatile的作用

  volatile的作用是作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值。

  1.編譯器的優化

  在本次執行緒內,當讀取一個變數時,為提高存取速度,編譯器優化時有時會先把變數讀取到一個暫存器中;以後再取變數值時,就直接從暫存器中取值;

當變數值在本執行緒裡改變時,會同時把變數的新值copy到該暫存器中,以便保持一致

當變數在因別的執行緒等而改變了值,該暫存器的值不會相應改變,從而造成應用程式讀取的值和實際的變數值不一致

  舉個例子:

  發薪資時,會計每次都把員工叫來登記他們的銀行卡號;有一次,會計為了省事,沒有即時登記,用了以前登記的銀行卡號;剛好一個員工的銀行卡丟了,已掛失該銀行卡號;從而造成該員工領不到工資。

  員工 -- 原始變數地址

  銀行卡號 -- 原始變數在暫存器的備份