Difference between revisions of "User talk:Python"
|  (Blanked the page) | |||
| Line 1: | Line 1: | ||
| + | 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--; | ||
| + | 			if(ovest == 0)	 /*nessuna auto in transito nel ponte */ | ||
| + | 			{ | ||
| + | 			turn = 0;	/*avanti un altro */ | ||
| + | 			} | ||
| + | 			if(!empty(q)) | ||
| + | 			{ | ||
| + | 			q.dequeue();		 | ||
| + | 			oktomove.signal();	/*segnale*/ | ||
| + | 		} | ||
| + | 	} | ||
| + | } | ||
| + | |||
| + | } | ||
Revision as of 22:47, 14 March 2014
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--; if(ovest == 0) /*nessuna auto in transito nel ponte */ { turn = 0; /*avanti un altro */ } if(!empty(q)) { q.dequeue(); oktomove.signal(); /*segnale*/ } } }
}