ProvaTeorica 2014.01.22

From Sistemi Operativi
Revision as of 19:07, 16 March 2014 by TomOgn (talk | contribs)
Jump to navigation Jump to search


URL: http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf

@author: Alessandro


monitor bridge {
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */
int turn=0;		/*indica il senso delle auto */
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */
Queue q;		/*coda delle senso delle macchine in attesa */

procedure entry enter (char EoW)
{
	if(EoW == "E")		/* viene da est */
	{
		if(turn == 2 || est >=N || !empty(q))  
		{
			q=equeue("E");		/*inserisco nella coda dei sensi*/	
			oktomove.wait();   	/*aspetta*/
									
		}
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */
	est++;
	}
	else		/* viene da ovest */
	{
		if(turn ==1 || ovest >=N || !empty(q))
		{
		        q=equeue("O");		/*inserisco nella coda dei sensi*/
			oktomove.wait();	/*aspetta*/
									
		}
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */
	ovest++;
	}
}

procedure entry exit(char EoW)
{
	char r;
	if(EoW == "O")
	{
	est--;
	r=tail(q);
		if(est == 0 || r == "E")
		{
		est--;
			if(est == 0)	/*nessuna auto in transito nel ponte */
			{
			turn = 0;	/*avanti un altro */
			}
			if(!empty(q))
			{
			q.dequeue();
			oktomove.signal();	/*segnale*/
			}
                }
	else
	{
	ovest--;
        r=tail(q);
		if(ovest == 0 || r == "O")	 /*nessuna auto in transito nel ponte */
		{
		turn = 0;	/*avanti un altro */
		}
		if(!empty(q))
		{
		q.dequeue();		
		oktomove.signal();	/*segnale*/
	        }
        }
}

}

Ex2014-01-22-c1.jpeg