次の Java コードを検討してください。
volatile boolean v1 = false;
volatile boolean v2 = false;
//Thread A
v1 = true;
if (v2)
System.out.println("v2 was true");
//Thread B
v2 = true;
if (v1)
System.out.println("v1 was true");
揮発性アクセスのグローバルに表示される合計注文があった場合、少なくとも 1 つの println に常に到達します。
それは実際にJava標準によって保証されていますか? または、このような実行は可能ですか:
A: v1 = true;
B: v2 = true;
A: read v2 = false;
B: read v1 = false;
A: v2 = true becomes visible (after the if)
B: v1 = true becomes visible (after the if)
標準で同じvolatile 変数へのアクセスに関するステートメントしか見つかりませんでした (ただし、何かが欠けている可能性があります)。
「揮発性変数への書き込み(§8.3.1.4)vは、任意のスレッドによるvの後続のすべての読み取りと同期します(後続は同期順序に従って定義されます)。」
http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.4.4
ありがとう!