I am trying Peterson's Solution for the Critical Section Problem, and I noticed that my static variable doesn't update unless I add a System.out.print("");
statement.
Why is this so?
Thanks.
The code for Peterson.java
is below:
public class Peterson {
public static void main(String[] args) throws InterruptedException {
Process p1 = new Process(0);
Process p2 = new Process(1);
p1.start();
p2.start();
p1.join();
p2.join();
}
}
class Process extends Thread {
static int turn;
static boolean[] wait = new boolean[2];
int ind;
public Process(int ind) {
this.ind = ind;
}
@Override
public void run() {
int ind2 = 1-ind;
wait[ind] = true;
turn = ind2;
// USING THIS WORKS
// while(wait[ind2] && turn == ind2) {System.out.print("");}
// USING THIS DOESN'T WORK
while(wait[ind2] && turn == ind2) {;}
// Critical Section
System.out.printf("%d Started%n", ind);
for (long t = System.currentTimeMillis(); System.currentTimeMillis() - t < 100;);
System.out.printf("%d Ended%n", ind);
wait[ind] = false;
}
}