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

admin2017-04-28  21

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

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

选项

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

最新回复(0)