簡體   English   中英

C#和Java中的volatile有什么區別?

[英]What are the differences between the volatile in c# and java?

在一些.net文檔中,我讀到了編譯器如何處理volatile的方法:

  • *“從易失性或使用Thread.VolatileRead方法讀取在邏輯上是獲取隔離區”
  • “從邏輯上講,寫到volatile或使用Thread.VolatileWrite方法都是釋放屏障” *

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

當然,VC ++的主要區別是,防護僅在編譯器級別應用。

所以我的問題是,Java中volatile的防止內存重新排序的語義是什么?

轉換:

柵欄=柵欄柵欄=柵欄

參考文獻:

Joe Duffy(Windows上的並發編程)

在Java中, javac編譯器javac不使用volatile。 它不會重新排序語句,並且幾乎不會進行優化。

另一方面,JIT可以進行很多優化和重新排序。

volatile的重要特征是:

  • 無法優化讀取/寫入訪問權限
  • 在易失性寫之前發生的任何寫都必須在寫之前發生。
  • 易失性讀取后發生的任何讀取都必須在讀取后發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM