主观题:h419.Jurassic公园有一个恐龙博物馆和一个花园,有m个旅客和n辆旅行车,每辆车仅能乘一个旅客。旅客在博物馆逛了一会儿,然后排队乘坐旅行车,......
Jurassic公园有一个恐龙博物馆和一个花园,有m个旅客和n辆旅行车,每辆车仅能乘一个旅客。旅客在博物馆逛了一会儿,然后排队乘坐旅行车,当一辆车可用时,它载入一个旅客,再绕花园行驶任意长时间。若n辆车都已被旅客乘坐游玩,则想坐车的旅客要等待。如果一辆车已经空闲,但没有旅客了,那么。车辆要等待。试用信号量和P、V操作同步m个旅客和n辆车子。
答案:解:
semaphore S1, S2, up, down;
S1=0; //开始时没有旅客乘车
S2=n; //有n辆旅行车
up=0;
down=0;
parbegin
process 旅客i (i=1, 2, ... , m)(3分)
{
逛恐龙博物馆;
P(S2); //看看是否有旅行车可乘
V(S1); //唤醒等待的旅行车
V(up); //旅客上车
看花园景色;
P(down); //等待下车
下车;
V(S2); //空旅行车数增1,若有旅客等待则唤醒之(3分)
离开公园;
}
process 旅行车j (j=1, 2, ... , n)
{
while (true) {
P(S1); //等待旅客到来
P(up); //等待旅客上好车
带着旅客绕花园行驶;
行驶完毕,回到发车点。
停车,开车门;
V(down); //告诉哦旅客可以下车了(4分)
}
}
parend
答案:解:
semaphore S1, S2, up, down;
S1=0; //开始时没有旅客乘车
S2=n; //有n辆旅行车
up=0;
down=0;
parbegin
process 旅客i (i=1, 2, ... , m)(3分)
{
逛恐龙博物馆;
P(S2); //看看是否有旅行车可乘
V(S1); //唤醒等待的旅行车
V(up); //旅客上车
看花园景色;
P(down); //等待下车
下车;
V(S2); //空旅行车数增1,若有旅客等待则唤醒之(3分)
离开公园;
}
process 旅行车j (j=1, 2, ... , n)
{
while (true) {
P(S1); //等待旅客到来
P(up); //等待旅客上好车
带着旅客绕花园行驶;
行驶完毕,回到发车点。
停车,开车门;
V(down); //告诉哦旅客可以下车了(4分)
}
}
parend