主题:[讨论]我就不信这里没有人真正懂操作系统!!!!
			
 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				
				楼主可以看看信号量集后面举的几个特例情况
							 
									
			
我来回复