主题:[讨论]我就不信这里没有人真正懂操作系统!!!!
lt19870917
[专家分:750] 发布于 2006-12-05 16:44:00
题目:
考虑只使用一个单行道对一隧道进行模拟.为了避免死锁,必须防止汽车同时在两端进入隧道.一旦一辆汽车进入隧道,则同一个方向上的其他汽车可以立即跟随进入.写出伪代码.最好用管程,可以不考虑饥饿,如果能考虑当然更好!
回复列表 (共4个回复)
沙发
lt19870917 [专家分:750] 发布于 2006-12-05 17:06:00
........
板凳
lt19870917 [专家分:750] 发布于 2006-12-05 17:16:00
真不希望如此
3 楼
lt19870917 [专家分:750] 发布于 2006-12-06 13:19:00
终于想出来了
monitor s{
int up_wait=0,up_num=0;//up_wait表示当向上允许通过时可以通过的车辆数,up_num表示当前有向上方向车辆正在通过隧道而又有新准备向上的车
int down_wait=0;down_num=0;//down_wait表示向下允许通过时可以通过的车辆数,down_num表示当前向下方向车辆正在通过隧道而又有新准备向下的车
condition up,down;
int uping=0,downing=0;//分别为请求信号
request_up(){
if(uping) up_num++;up.wait;
if(downing) up_wait++;up.wait;
uping=1;
}
release_up(){
uping=0;
if(up_wait>0) up.signal;
else {down_wait=down_wait+down_num;down.signal;}
}
request_down(){
if(uping) down_wait++;down.wait;
if(downing) down_num++;down.wait;
downing=1;
}
release_down(){
downing=0;
if(down_wait>0) down.signal;
else {up_wait=up_wait+up_num;up.signal;}
}
}
4 楼
wuchengwei [专家分:1650] 发布于 2007-04-26 13:03:00
楼主可以看看信号量集后面举的几个特例情况
我来回复