carj; //j=1,2,..,n
coend
}
bargei(){
.....
P(mutexb);
P(mutexa);
吊起 B 桥;
吊起 A 桥;
驳船通过 A 桥;
放下 A 桥;
驳船通过 B 桥;
放下 B 桥;
V(mutexa);
V(mutexb);
.....
}
carj(){
......
P(mutex);
count++;
if(count==1)
{
P(mutexb);
P(mutexa);
}
V(mutex);
汽车通过 B 桥;
汽车通过 AB 段公路;
汽车通过 A 桥;
P(mutex);
count--;
if(count==0)
{
V(mutexb);
V(mutexa);
}
V(mutex);
..... }
d设置两个互斥信号量mutexa,mutexb,用来实现驳船和汽车对A桥和对B桥的互斥使用;设置两个共享变量counta和countb,分别用来记录A桥和B桥上的汽车数并设置互斥信号
量mutex1和mutex2,用来实现汽车对共享变量counta和countb的互斥访问。
Main( ){
int mutexa, mutexb, mutex1, mutex2, counta, countb;
mutexa=1;
mutexb=1;
mutex1=mutex2=1;
counta=countb=0;
cobegin
bargei; //i=1,2,...,m
carj; //j=1,2,...,n
Coend }
bargei(){
.....
P(mutexb);
吊起 B 桥;
P(mutexa);
吊起 A 桥;
驳船通过 A 桥;
放下 A 桥;
V(mutexa);
驳船通过 B 桥;
放下 B 桥;
V(mutexb);
.... }
carj(){
....
P(mutex2);
countb++;
if(countb==1)
P(mutexb);
V(mutex2);
汽车通过 B 桥;
P(mutex2);
countb--;
if(countb==0)
V(mutexb);
V(mutex2);
汽车通过 AB 段公路;
P(mutex1);
counta++;
if(counta==1)
P(mutexa);
V(mutex1);
汽车通过 A 桥;
P(mutex1);
counta--;
if(counta==0)
V(mutexa);
V(mutex1);
..... }
5-7 讨论下图描述的交通死锁的例子(设个方向上的汽车是单线的,直线行驶):
(1)对于死锁的四个必要条件中的哪些条件在此例中是适用的? (2)提出一个简单的原则,它能避免死锁。
(3)若用计算机实现交通的自动管理,请用信号灯上的V,P操作来实现各方向上汽车行驶的同步。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库操作系统原理课后习题答案(3)在线全文阅读。
相关推荐: