// idea
// turn = 1 iff turn[0]=turn[1]
// turn = 0 iff turn[0] != turn[1]
public class KesselAlgorithm {
boolean wantCS[] = {false, false};
int turn[] = {0,0};
int local[] = {0,0};
public void requestCS0() {
wantCS[0] = true;
local[0] = turn[1];
turn[0] = local[0];
while (wantCS[1] && (local[0] == turn[1])) ;
}
public void releaseCS0() {
wantCS[0] = false;
}
public void requestCS1() {
wantCS[1] = true;
local[1] = 1-turn[0];
turn[1] = local[1];
while (wantCS[0] && (local[1] != turn[0])) ;
}
public void releaseCS1() {
wantCS[1] = false;
}
}