天天看點

多行程環境下使用volatile修飾變量在就真的安全了麼?

      volatile生效的關鍵是緩存一緻性協定,在修改變量的時候通知其他已讀取緩存的線程此變量已經修改,觸發其他線程對變量緩存的重新讀取,以此保證資料不會髒讀 。但是這裡有個問題,修改也就是往記憶體寫變量的時候才會觸發檢查。而多線程環境下變量安全的标志是(原子性,可見性,有序性),這裡隻實作了可見性。變量操作的過程包括讀取到緩存中和操作後寫入磁盤兩個操作,寫入磁盤可以保證其他線程立刻擷取最新的内容,但是讀取到緩存卻不能保證。也就是說volatile隻能保證具有原子性或者不依賴目前讀取到緩存内容的變量的安全性。是以,volatile并不是并發中萬能的變量安全保護傘,想要不出問題還是要根據實際情況使用不同的方法,例如加鎖。要注意,加鎖是要慎重又慎重,重則死鎖,輕則頻繁的解鎖上鎖也是讓人無法接受的 。

多行程環境下使用volatile修飾變量在就真的安全了麼?

繼續閱讀