pterson's算法是两个进程同时访问一个资源,使用纯软件实现了互斥锁.比操作系统的互斥锁性能更好一些.
缺点:只能实现两个进程的互斥访问.
解决了临界区问题的三个标准: 互斥访问,进入(不发生死锁),有限等待(即不饿死)
peterson算法可以确保: 不会让两个进程同时进入临界区.
不会让进程进入死循环(即两个进程都不能进入临界区)
不会让进程都饿死在临界区外,即保证每个进程都可以进入临界区
本质是谦让模式:两个进程如果有一个想进入临界区,先观察一下另一个是否也想进入临界区,如果是,则让另一个进程先进入.
#include<stdio.h>
boolean flag[2];
int turn;
void P0(){
flag[0]=true;
turn=1;
while(flag[1]&&turn==1){} //flag[1]为false,不满足循环条件,P0就进入临界区.若flag[1]为true,满足循环条件,P0循环等待,P1退出临界区,P0进入
print("0号进程在访问临界区")
临界区;
flag[0]=false; //临界区访问完成, 0号进程释放临界区
}
void P1(){}
flag[1]=true;
turn=0;
while(flag[0]&&turn==0){} //flag[0]为false,不满足循环条件,P1就进入临界区,若flag[0]为true,满足循环条件,P1循环等待,P0退出临界区,P1进入
print("1号进程在访问临界区")
临界区;
flag[1]=false; //临界区访问完成, 1号进程释放临界区.
}
int main(){
flag[0]=false;flag[1]=false;
P1();
P0();
P0();
P1();
}