Volatile 字面的意思時易變的,不穩定的。在C#中也差不多可以這樣理解。
編譯器在優化代碼時,可能會把經常用到的代碼存在Cache裡面,然後下一次調用就直接讀取Cache而不是內存,這樣就大大提高了效率。但是問題也隨之而來了。
在多線程程序中,如果把一個變量放入Cache後,又有其他線程改變了變量的值,那麼本線程是無法知道這個變化的。它可能會直接讀Cache裡的數據。但是很不幸,Cache裡的數據已經過期了,讀出來的是不合時宜的髒數據。這時就會出現bug。
用Volatile聲明變量可以解決這個問題。用Volatile聲明的變量就相當於告訴編譯器,我不要把這個變量寫Cache,因為這個變量是可能發生改變的。