package data.transforms;
final public class RoachMotelSemantics {
static int x = 0;
static int y = 0;
static int z = 0;
final static Object m = new Object();
final public static void thread1() { synchronized (m) { x = 2; } }
final public static void thread2() { synchronized (m) { x = 1; } }
final public static void thread3() {
final int r1;
final int r2;
r1 = x;
synchronized (m) {
r2 = z;
if (r1 == 2) y = 1; else y = r2;
}
assert r1 == 1;
assert r2 == 1;
}
final public static void thread4() {
final int r3 = y;
z = r3;
assert r3 == 1;
}
final public static void thread3T() {
final int r1;
final int r2;
synchronized (m) {
r1 = x;
r2 = z;
if (r1 == 2) y = 1; else y = r2;
}
assert r1 == 1;
assert r2 == 1;
}
public RoachMotelSemantics() { super(); }
}