给出一个单车道的简易桥,如图8—4所示。 车流如箭头所示。桥上不允许有两车交会,但允许同方向车依次通行(即桥上可以有多个同方向的车)。该桥最大可载重5辆汽车。用P,V操作实现交通管理,以防桥上交通堵塞。

admin2014-04-17  42

问题 给出一个单车道的简易桥,如图8—4所示。

    车流如箭头所示。桥上不允许有两车交会,但允许同方向车依次通行(即桥上可以有多个同方向的车)。该桥最大可载重5辆汽车。用P,V操作实现交通管理,以防桥上交通堵塞。

选项

答案本题是基于读者一写者问题衍生出来的题日,可以看成是两批互斥的读者,且对于正在读的读者数目有限制。理解每个信号量的意义后,再看进程描述。 int east count=0; //记录东端获得上桥许可的车辆数 int west count=0; //记录西端获得上桥许可的车辆数 semaphore meast=1; //实现对east count的互斥访问 semaDhore mwest=1; //实现对west count的互斥访问 semaDhore scount=5; //桥的剩余载重信号量 semaphore mutex=1; //实现东西两端车辆互斥上桥 Process east(i)(i=1,2,3…) //东端车辆过桥进程 { P(meast); if(east count==0) //第一辆东端来车 P(mutex); //申请东端车辆上桥 east count++; //获得上桥许可的东端车辆数增1 V(meast); P(scount); //可同时上桥的车辆数减1 Cross the Bridge; v(scount); //可同时上桥的车辆数增1 P(meast); east count--; //获得上桥许可的东端车辆数减1 if(east count==0) //最后一辆获得上桥许可的车辆已过桥 v(mutex); //允许西端车辆上桥 V(meast); } Proces s west(i)(i=1,2,3…) //西端车辆过桥进程,注释参照east(i) { P(mwest); if(west count==0) p(mutex); west Count++; V(mwest); P(scount); Cross the Bridge; V(scount), P(mwest); west Count--; if(west count==0) V(mutex); V(mwest); }

解析
转载请注明原文地址:https://kaotiyun.com/show/QYxi777K
0

最新回复(0)