在JSR-133中,有两个例子可能是状态正确同步的程序.
第一个例子如图6所示,其中:
x == y == 0
Run Code Online (Sandbox Code Playgroud)
然后,线程1通过以下方式修改状态:
r1 = x;
if (r1 != 0)
y = 1;
Run Code Online (Sandbox Code Playgroud)
和线程2通过以下方式修改状态:
r2 = y;
if (r2 != 0)
x = 1;
Run Code Online (Sandbox Code Playgroud)
作者声明该程序已正确同步,但是,此程序的执行会导致r1 == r2 == 1.后一个价值怎么可能呢?
此外,图7表示初始状态:
x == y == 0
Run Code Online (Sandbox Code Playgroud)
用线程1修改:
r1 = x;
y = r1;
Run Code Online (Sandbox Code Playgroud)
和线程2执行:
r2 = y;
x = r2;
Run Code Online (Sandbox Code Playgroud)
怎么会导致这种情况r1 == r2 == 42?