Java 5 以降、volatileキーワードにはリリース/取得セマンティクスがあり、副作用を他のスレッドから見えるようにします (非揮発性変数への代入を含む!)。たとえば、次の 2 つの変数を使用します。
int i;
volatile int v;
iは通常の非揮発性変数であることに注意してください。次のステートメントを実行するスレッド 1 を想像してください。
i = 42;
v = 0;
その後、スレッド 2 は次のステートメントを実行します。
int some_local_variable = v;
print(i);
Java メモリ モデルによると、vスレッド 1 での書き込みとそれに続くスレッド 2 での読み取りによりv、スレッド 2 はiスレッド 1 で実行された書き込みを認識できるため、値 42 が出力されます。
私の質問はvolatile、C# で同じリリース/取得セマンティクスを持っていますか?