- 1. 背景 首先,看个例子,进程P1,P2共用一个变量COUNT,初始值为0
- 2.临界区域问题
- 3.Peterson算法
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;
}}
空闲让进
| 当无进程处于临界区内时,必须让一个要求进入临界区的进程立即进入,以有 效地利用临界资源。 |
忙则等待
| 当已有进程处于临界区内时,其它试图进入临界区的进程必须等待,以保证它 们互斥地进入临界区。 |
有限等待
| 对要求进入临界区的进程,应在有限时间内使之进入,以免陷入“死等”。 |
让权等待
| 对于等待进入临界区的进程而言,它必须立即释放处理机,以免进程“忙等” |
435



被折叠的 条评论
为什么被折叠?



