有一座只能容单列汽车通过的长窄桥,桥两边的汽车在对面没有汽车在桥上的情况下可以上桥并通过桥,且同一方向可以允许任意多的汽车通过。请用信号量操作实现桥两边汽车的安全通过,两边的汽车各作为一组进程,并说明各个信号量的意义和初值。

admin2016-05-14  47

问题 有一座只能容单列汽车通过的长窄桥,桥两边的汽车在对面没有汽车在桥上的情况下可以上桥并通过桥,且同一方向可以允许任意多的汽车通过。请用信号量操作实现桥两边汽车的安全通过,两边的汽车各作为一组进程,并说明各个信号量的意义和初值。

选项

答案这个问题类似于读者写者问题中的读者,区别是桥两边各是一组独立的读者,这两者之间需要互斥。 int count1,count2:桥两边汽车上桥的计数器变量,初值为0。 mutex1,mutex2:计数器变量加减时的互斥信号量,初值为1。 first:两边允许第一辆汽车上桥的互斥信号量,初值为1。 一边的汽车: 另一边的汽车: while(1){ while(1){ semWait(mutex1); semWait(mutex2); if(++count1==1) if(++count2==1) semWait(first); semSignal(first); semSignal(mutex1); semSignal(mutex2); 上桥,通过; 上桥,通过; semWait(mutex1); semWait(mutex2); if(--count1==0) if(--count2==0) semSignal(first); semSignal(first); semSignal(mutexl); semSignal(mutex2); } }。

解析
转载请注明原文地址:https://jikaoti.com/ti/wsEaFFFM
本试题收录于: 操作系统题库理工类分类
0

最新回复(0)