同步机制应遵循的准则
1. 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
2. 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
3. 有限等待。对请求访问的进程,应保证能在有限时间进入临界区,保证不饥饿。
4. 让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。
实现临界区互斥的基本方法
1. 单标志法。违背 “ 空闲让进 ”。
2. 双标志先检查。违背 “ 忙着等待 ”。
3. 双标志后检查。可能导致饥饿。
4. 皮特森算法。结合1、3,遵循了空闲让进,忙则等待,有限等待三个原则,但未遵循让权等待。
信号量机制
利用信号量实现进程互斥
互斥是不同进程对同一信号量进行 P、V 操作实现的。
semaphore S = 1;
P1() {
...
P(S); //准备开始访问临界资源,加锁
进程 P1 的临界区
V(S); //访问结束,解锁
...
}
P2() {
...
P(S);
进程 P2 的临界区
V(S);
...
}
利用信号量实现同步
例如:语句 x 执行完成后才能执行语句 y。要对 y 语句执行前进行上锁,即执行 P(S)
semaphore S = 0;
P1() {
x;
V(S); //解锁
...
}
P2() {
...
P(S); //上锁
y;
}
归纳:
1. 设置同步信号量 S ,初值为 0。