我從mailing list郵件它說,如果揮發性瓦爾行動包含數據爭再保證(「A計劃是否能正確同步,當且僅當所有順序一致的執行都是免費的數據競爭。」在JLS)不能應用。爲什麼我們不能應用JLS中包含的保證?
爲了方便,我只是把的orginal content部分在這裏:
我有一個使用volatile變量的程序,我試圖來思考它使用「A計劃是否能正確同步,當且僅當所有順序一致的執行都沒有數據競爭。「在JLS3中保證。
JLS3似乎包含毛刺,防止我從證明我的計劃是免費的數據競爭。具體來說,考慮在同步順序中R之後的易失性變量V的讀取R和V的寫入W。 JLS3似乎認爲R和W是相沖突的訪問。而且, 從R到W之前沒有發生 - 之前的邊緣(以及如此)。因此,JLS3似乎也認爲R和W構成了數據競賽。最後,似乎因此我不能適用上述保證。
所以這是我的問題:如果對易失性變量的操作包含數據競爭,爲什麼我們不能應用JLS中包含的保證?
這不是一個保證,這是一個定義,並明確排除了你所描述的情況。不是一個真正的問題。 – EJP
的答案給出爲[在該消息(http://www.cs.umd.edu/~pugh/java/memoryModel/archive/2482.html)=>有在數據競爭的定義中的錯誤,其允許這樣做,但它不應該是這種情況(即使用volatile變量應該可以防止數據競爭,但現在的JMM措辭並不總是這種情況)。 – assylias
@assylias令人困惑的是,這一事實已爲OP所熟知。 –