现有A,B两队人要过河,河上有船,但是每次只能乘坐4个人,并且每次乘客满员才能开船,到河对岸后空船返回。由于某种原因,过河时船上不能同时有三个A队人员、一个B队人员或者一个A队人员、三个B队人员的组合(即其他组合是安全的)。请编写程序,用PV操作正确解决A

admin2014-07-18  29

问题 现有A,B两队人要过河,河上有船,但是每次只能乘坐4个人,并且每次乘客满员才能开船,到河对岸后空船返回。由于某种原因,过河时船上不能同时有三个A队人员、一个B队人员或者一个A队人员、三个B队人员的组合(即其他组合是安全的)。请编写程序,用PV操作正确解决A,B两队人过河的问题,并说明所设置的信号量及其初值。

选项

答案int m=4; //信号量,初始值为4 Embark(A){ //登船函数 P(m); A.embark(); } Sail(){ //开船 go(); V(m);V(m);V(m);V(m); } while(true){ if(t==0){ int t=4; //记录已经登船人数 int i:0; //记录A登船人数,4时不允许同类再登船 int j=0; //记录B登船人数,4时不允许同类再登船 } while(team.hasNext()){ ready=team.next(); if(ready= =A){ if(i= =4)continue; //防止3和1的情况 else{ t--: j++; Embark(ready); } } if(i= =3 Il(i= =2&&j= =1))j=4; //防止3和1的情况 if(j= =3 lI(j= =2&&i= =1))i=4; //防止3和1的情况 if(t= =0){ Sail(); break; } } team.relnit(); //整理等候队列 }

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

最新回复(0)