public class Peterson implements Runnable { private static boolean[] in = { false, false }; private static volatile int turn = -1; public static void main(String[] args) { new Thread(new Peterson(0), "Thread - 0").start(); new Thread(new Peterson(1), "Thread - 1").start(); } private final int id; public Peterson(int i) { id = i; } private int other() { return id == 0 ? 1 : 0; } @Override public void run() { in[id] = true; turn = other(); while (in[other()] && turn == other()) { System.out.println("[" + id + "] - Waiting..."); } System.out.println("[" + id + "] - Working (" + ((!in[other()]) ? "other done" : "my turn") + ")"); in[id] = false; }}
空闲让进
|
当无进程处于临界区内时,必须让一个要求进入临界区的进程立即进入,以有 效地利用临界资源。 |
忙则等待
|
当已有进程处于临界区内时,其它试图进入临界区的进程必须等待,以保证它 们互斥地进入临界区。 |
有限等待
|
对要求进入临界区的进程,应在有限时间内使之进入,以免陷入“死等”。 |
让权等待
|
对于等待进入临界区的进程而言,它必须立即释放处理机,以免进程“忙等” |
转载请注明出处:http://blog.csdn.net/speedme