2012-03-21 34 views
-1

說我在這樣的循環檢查的變量。用這種用法揮發很好嗎?

while(var) 
    ; 

這裏,VAR必須聲明volatile如果程序是多線程和VAR被多個線程訪問。這是一個已知的事實。但是,讓我們說,我們有這樣的東西。

while(var + 1) 
    ; 

請問這仍然適用於volatile?我的意思是有可能,編譯器緩存(VAR + 1)價值?換句話說,我問,如果我們需要像下面的代碼這一點,與臨時是一個也volatile變量,以確保沒有緩存由編譯器完成。

while(temp) 
    temp = var + 1; 

回答

3

從編譯器的角度來看它是一樣的。一個volatile變量必須從內存中時,它的訪問重新讀取。評估varvar + 1都涉及訪問var,因而它們必須包括讀取回來。沒有區別。

5

也許我補充一點,檢查這樣使用volatile爲您守護線程一個變種是根本不足以防止各種以及各種比賽情況的發生。如果您處於線程環境中,請使用適當的鎖,原子和/或互斥體結構來抓取和操縱您的變量。

相關問題