2013-2 假设有个南北向的胡同,仅能容纳同方向的人顺序走过,相对方向的人无法通过。现在南北方向都有人,用PV操作实现管理。
int count1=0,count2=0;
semaphore mutex1=1,mutex2=1,road=1; //mutex用于保护count时的互斥
P1(){
while(1){
P(mutex1);
if(count1==0)
P(road);
count1++;
V(mutex1);
通过
P(mutex1)
count1--;
if(count1==0)
V(road);
V(mutex1);
}
}
P2(){
while(1){
P(mutex2);
if(count2==0)
P(road);
count2++;
V(mutex2);
通过
P(mutex2)
count2--;
if(count2==0)
V(road);
V(mutex2);
}
}