2014-02-25 41 views
0

在一些.NET文檔我已閱讀,這是編譯器如何處理揮發性:在C#和Java中的易變性之間有什麼區別?

  • *「從揮發性閱讀或使用Thread.VolatileRead方法在邏輯上是一個獲取柵欄」
  • 「寫入volatile或使用Thread.VolatileWrite方法在邏輯上是一個釋放圍欄「*

這些柵欄適用於編譯器和體系結構級別。

當然,VC++的主要區別在於柵欄只適用於編譯器級別。

所以我的問題是,什麼是Java的易失性內存重新排序預防語義?

轉換:

柵欄=屏障 屏障=柵欄

參考文獻:

喬·達菲(在Windows併發編程)

+0

您應該在JLS(http://docs.oracle.com/javase/specs/)中找到答案,儘管當然詞彙表會有所不同 – fge

+0

無我知道; Java中的易失性讀取相當於獲取,寫入發佈 - 與CLR相同。 – Voo

回答

1

在Java中,javac編譯器旁邊確實給自認倒黴易揮發。它不會重新排列語句,並且幾乎不會進行優化。

JIT另一方面可以做相當多的優化和重新排序。

volatile的重要特點是;

  • 讀/寫訪問不能被優化掉
  • 之前揮發性寫入擁有寫之前發生發生任何寫入。
  • 任何在讀取之後發生的讀取都必須在讀取之後發生。
相關問題