Difference between revisions of "User talk:AlexJ"
(→ProvaTeorica 2014.01.22: new section) |
|||
Line 29: | Line 29: | ||
if(turn ==1 || ovest >=N || !empty(q)) | if(turn ==1 || ovest >=N || !empty(q)) | ||
{ | { | ||
− | + | q=equeue("O"); /*inserisco nella coda dei sensi*/ | |
oktomove.wait(); /*aspetta*/ | oktomove.wait(); /*aspetta*/ | ||
Latest revision as of 00:12, 15 March 2014
ProvaTeorica 2014.01.22
<syntaxhighlight lang="C">
http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf
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*/ } } }
}