Difference between revisions of "Prova Teorica 2007.07.12"
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
	
|  (Created page with "=[http://www.cs.unibo.it/~renzo/so/compiti/2007-07-12.tot.pdf TESTO COMPITO]= =CONCORRENZA= ==Esercizio 1== <syntaxhighlight lang="Java"> /* 	In una situazione ideale, il gioc...") | |||
| Line 3: | Line 3: | ||
| ==Esercizio 1== | ==Esercizio 1== | ||
| <syntaxhighlight lang="Java"> | <syntaxhighlight lang="Java"> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| monitor oca | monitor oca | ||
| { | { | ||
| Line 18: | Line 8: | ||
| 	int playerPosition[N] = { 0, ..., 0 }; | 	int playerPosition[N] = { 0, ..., 0 }; | ||
| 	bool winner = false; | 	bool winner = false; | ||
| + | 	bool blocked[N] = { false, ..., false }; | ||
| 	int turn = 0; | 	int turn = 0; | ||
| 	blockedPlayer = {} // Python-like dictionary | 	blockedPlayer = {} // Python-like dictionary | ||
| Line 51: | Line 42: | ||
| 		} | 		} | ||
| − | 		turn = i + 1 % N; | + | 		turn = (i + 1) % N; | 
| 		while (blocked[turn]) | 		while (blocked[turn]) | ||
| − | + | 			turn = (turn + 1) % N; | |
| − | |||
| 		player[turn].signal(); | 		player[turn].signal(); | ||
| Line 60: | Line 50: | ||
| 	} | 	} | ||
| } | } | ||
| + | |||
| + | /* | ||
| + | 	In una situazione ideale, il giocatore (n), terminata la giocata, segnala il giocatore (n + 1) e termina. | ||
| + | 	Solo dopo che il giocatore (n) ha terminato, il giocatore (n + 1) inizia la sua giocata. | ||
| + | 	Questa situazione ideale e' descrivibile mediante la politica Signal And Continue. | ||
| + | 	Con Signal Urgent, di converso, il giocatore (n) non termina l'esecuzione della procedure entry | ||
| + | 	fino a quando non la termina il giocatore (n + 1). Il giocatore (n + 1) non la termina fino a quando | ||
| + | 	non termina il giocatore (n + 2) et cetera. | ||
| + | 	Questo meccanismo dello Urgent Stack risulta inutilmente dispendioso in questa fattispecie. | ||
| + | */ | ||
| </syntaxhighlight> | </syntaxhighlight> | ||
| + | |||
| ==Esercizio 2== | ==Esercizio 2== | ||
| <syntaxhighlight lang="C"> | <syntaxhighlight lang="C"> | ||
Latest revision as of 12:57, 15 May 2014
TESTO COMPITO
CONCORRENZA
Esercizio 1
monitor oca
{
	condition player[N];
	int playerPosition[N] = { 0, ..., 0 };
	bool winner = false;
	bool blocked[N] = { false, ..., false };
	int turn = 0;
	blockedPlayer = {} // Python-like dictionary
	muovi(i, n)
	{
		if (winner)
			return 2;
		if (i != turn)
			player[i].wait();
		if (winner)
			return 2;
		playerPosition[i] += n;
		if (playerPosition[i] >= 99)
		{
			winner = true;
			for (int j = 0; j < i; j++)
					player[j].signal();
			for (int j = i + 1; j < N; j++)
					player[j].signal();				
			return 1;
		}
		if (isMultiple13(playerPosition[i]))
		{
			if (blockedPlayer[playerPosition[i]])
				blocked[blockedPlayer[playerPosition[i]]] = false;
			blocked[i] = true;
			blockedPlayer[playerPosition[i]] = i;
		}
		turn = (i + 1) % N;
		while (blocked[turn])
			turn = (turn + 1) % N;
		player[turn].signal();
		return 0;
	}
}
/*
	In una situazione ideale, il giocatore (n), terminata la giocata, segnala il giocatore (n + 1) e termina.
	Solo dopo che il giocatore (n) ha terminato, il giocatore (n + 1) inizia la sua giocata.
	Questa situazione ideale e' descrivibile mediante la politica Signal And Continue.
	Con Signal Urgent, di converso, il giocatore (n) non termina l'esecuzione della procedure entry
	fino a quando non la termina il giocatore (n + 1). Il giocatore (n + 1) non la termina fino a quando
	non termina il giocatore (n + 2) et cetera.
	Questo meccanismo dello Urgent Stack risulta inutilmente dispendioso in questa fattispecie.
*/
Esercizio 2
adoublesend(msg, dst1, dst2)
{
	asend(msg, dst1);
	arecv(dst1);
	asend(msg, dst2);
}
adoublerecv(sender)
{
	output = arecv(sender);
	asend(OK, sender);
	return output;
}
GENERALE
Esercizio 2
| Max | Allocated | Need | Available | Safeness Conditions | |||||
| A | B | A | B | A | B | A | B | ||
| P2 | 5 | 10 | 3 | 5 | 2 | 5 | 3 | 4+x | x>=1 | 
| P1 | 6 | 5 | 0 | 3+x | 6 | y | 6 | 9+x | x=2-y | 
| P3 | 7 | 7 | 1 | 5 | 6+y | 2 | 6 | 12+2x | y=0 | 
| P4 | 7+x+z | 8+w | x+z | z | 7 | 8+z | 7 | 17+2x | w=2z, 8+z<=17+2x | 
| Range CI: | from | 6 | 15 | <=> y=0, x=2, w=2z, z<=13 | |||||
| to | 19 | 28 | |||||||
| step | 1 | 1 | |||||||