【正确答案】正确答案:本题是基于读者一写者问题衍生出来的题目,可以看成是两批互斥的读者,且对于正在读的读者数目有限制。理解每个信号量的意义后,再看进程描述。 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); }
【答案解析】