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

admin2017-11-20  23

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

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

选项

答案本题是基于读者一写者问题衍生出来的题目,可以看成是两批互斥的读者,且对于正在读的读者数目有限制。理解每个信号量的意义后,再看进程描述。 int east count=0; //记录东端获得上桥许可的车辆数 int west count=0; //记录西端获得上桥许可的车辆数 semaphore meast=1; //实现对east_count的互斥访问 semaphore mwest=1; //实现对west_count的互斥访问 semaphore 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 least_count==0) //最后一辆获得上桥许可的车辆已过桥 V(mutex); //允许西端车辆上桥 V(meast); } Process 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/RVRi777K
0

最新回复(0)