<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AlexJ</id>
	<title>Sistemi Operativi - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AlexJ"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php/Special:Contributions/AlexJ"/>
	<updated>2026-04-30T16:36:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=546</id>
		<title>ProvaPratica 2010.07.12</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=546"/>
		<updated>2014-04-02T09:04:21Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: /* Esercizio 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
int aggiorna_maxprio(int maxprio,int prio,int waiting[]){&lt;br /&gt;
int i;&lt;br /&gt;
if(waiting[maxprio] == 0)&lt;br /&gt;
	{&lt;br /&gt;
       	maxprio=0;&lt;br /&gt;
		for(i=prio;i&amp;gt;=0;i--)&lt;br /&gt;
		{&lt;br /&gt;
			if(waiting[i]!=0)&lt;br /&gt;
			{&lt;br /&gt;
			maxprio=i;&lt;br /&gt;
			break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
return maxprio;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
condition run[10];&lt;br /&gt;
int waiting[10]=0,0,0,0,0,0,0,0,0,0;&lt;br /&gt;
int maxprio=0;&lt;br /&gt;
int occupato=0;&lt;br /&gt;
&lt;br /&gt;
procedure entry init(prio){	&lt;br /&gt;
	if(occupato==1)&lt;br /&gt;
	{&lt;br /&gt;
		if(maxprio &amp;lt; prio)&lt;br /&gt;
		{&lt;br /&gt;
		maxprio=prio;&lt;br /&gt;
		}&lt;br /&gt;
	waiting[prio]++;			&lt;br /&gt;
	run[prio].wait();&lt;br /&gt;
	waiting[prio]--;&lt;br /&gt;
	maxprio=aggiorna_maxprio(maxprio,prio,waiting);&lt;br /&gt;
	}&lt;br /&gt;
occupato=1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry yield(prio){&lt;br /&gt;
run[maxprio].signal();&lt;br /&gt;
        if(maxprio &amp;lt; prio)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=prio;&lt;br /&gt;
	}&lt;br /&gt;
waiting[prio]++;&lt;br /&gt;
run[prio].wait();&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
maxprio=aggiorna_maxprio(maxprio,prio,waiting);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry fini(prio){&lt;br /&gt;
occupato=0;&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
maxprio=aggiorna_maxprio(maxprio,prio,waiting);		&lt;br /&gt;
run[maxprio].signal();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//Processo con prioritá 0 = Processo con piú alta prioritá&lt;br /&gt;
//Processo con prioritá 9 = Processo con meno prioritá&lt;br /&gt;
monitor priocoop {&lt;br /&gt;
	condition oktogo[10];&lt;br /&gt;
	int wait[10] = 0,0,0,0,0,0,0,0,0;&lt;br /&gt;
	int running;&lt;br /&gt;
	priocoop.init(prio) {&lt;br /&gt;
		if(running != 0) {&lt;br /&gt;
			wait[prio]++;&lt;br /&gt;
			oktogo[prio].wait;&lt;br /&gt;
			wait[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.yield(prio) {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				wait[prio]++;&lt;br /&gt;
				oktogo[prio].wait;&lt;br /&gt;
				wait[prio]--;&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.fini() {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//0: priorita' maggiore&lt;br /&gt;
//9: priorita' minore&lt;br /&gt;
cond oktoenter[10];&lt;br /&gt;
int count[10];&lt;br /&gt;
bool running = false;&lt;br /&gt;
&lt;br /&gt;
//restituisce la priorita' maggiore che ha un processo in attesa&lt;br /&gt;
getprio() {&lt;br /&gt;
      	for(i=0;i&amp;lt;10;i++) {&lt;br /&gt;
		 if(count[i]&amp;gt;0)&lt;br /&gt;
			 break;&lt;br /&gt;
	 }&lt;br /&gt;
	 return i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
priocoop() {&lt;br /&gt;
	init (prio) {&lt;br /&gt;
		if (running) {&lt;br /&gt;
			count[prio]++;&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
		running = true;&lt;br /&gt;
	}&lt;br /&gt;
	yield(prio) {&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if (i &amp;lt; 10) {&lt;br /&gt;
			// running = false; &lt;br /&gt;
			oktoenter[i].signal();&lt;br /&gt;
			count(prio)++&lt;br /&gt;
			oktoenter[proc].wait();&lt;br /&gt;
	                // running = true;&lt;br /&gt;
        	        count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	fini(prio){&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if(i&amp;lt;10)&lt;br /&gt;
			oktoenter[i].signal;&lt;br /&gt;
		else&lt;br /&gt;
			running=false;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Stefano B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
	condition oktoenter[10];&lt;br /&gt;
	queue waiting[10];&lt;br /&gt;
	&lt;br /&gt;
	procedure entry init(int prio){&lt;br /&gt;
		if(!(prio &amp;gt;= 0 &amp;amp;&amp;amp; prio&amp;lt;=9))&lt;br /&gt;
			exit(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry yield(int prio){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
		if(priority&amp;gt;=0){ /* se non ci fosse questo controllo avremmo un caso di deadlock&lt;br /&gt;
						  * in quanto le code sono vuote */&lt;br /&gt;
			waiting[prio].enqueue();&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			waiting[prio].dequeue(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry fini(){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Francesca e Giulia&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
db.getpriortymax(); //funzione che restituisce il messaggio con prioritá maggiore e lo rimuove dal db o 0 nel caso il db sia vuoto&lt;br /&gt;
Process n: {&lt;br /&gt;
&lt;br /&gt;
	psend(dest, prio,msg) {&lt;br /&gt;
		asend((msg, prio),dest);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	precv(sender) {&lt;br /&gt;
		while((msg,prio) = arecv(sender)) {&lt;br /&gt;
			db[sender].insert((msg,prio));&lt;br /&gt;
		}&lt;br /&gt;
		return (db[sender].getpriortymax());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Esercizio 3 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
lock=-1;&lt;br /&gt;
&lt;br /&gt;
Process P[i]{&lt;br /&gt;
while(true){&lt;br /&gt;
  do{;}&lt;br /&gt;
  while(twomult.op(lock)==lock);&lt;br /&gt;
  //critical section&lt;br /&gt;
  lock = -lock;&lt;br /&gt;
  //no critical section&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inizialmente:  a=1;   b=1;&lt;br /&gt;
&lt;br /&gt;
Primo processo:&lt;br /&gt;
lock=-1   a=-1   b=1&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
&lt;br /&gt;
Secondo processo:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Siccome lock==b non esce dal while e continua:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Si ripeterano sempre gli stessi valori,&lt;br /&gt;
fino al cambio di valore di lock che passa da&lt;br /&gt;
-1 a 1  così :&lt;br /&gt;
lock=1  a=-1  b=-1;&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
Mentre l'altro processo si bloccherà poichè:&lt;br /&gt;
lock=1  a=1  b=1;&lt;br /&gt;
fino al ritorno di lock al valore -1;&lt;br /&gt;
lock=-1  a=-1  b=1;&lt;br /&gt;
C.V.D&lt;br /&gt;
&lt;br /&gt;
----Alessandro&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=545</id>
		<title>ProvaPratica 2010.07.12</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=545"/>
		<updated>2014-04-02T09:01:42Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: /* Esercizio 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
int aggiorna_maxprio(int maxprio,int prio,int waiting[]){&lt;br /&gt;
int i;&lt;br /&gt;
if(waiting[maxprio] == 0)&lt;br /&gt;
	{&lt;br /&gt;
       	maxprio=0;&lt;br /&gt;
		for(i=prio;i&amp;gt;=0;i--)&lt;br /&gt;
		{&lt;br /&gt;
			if(waiting[i]!=0)&lt;br /&gt;
			{&lt;br /&gt;
			maxprio=i;&lt;br /&gt;
			break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
return maxprio;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
condition run[10];&lt;br /&gt;
int waiting[10]=0,0,0,0,0,0,0,0,0,0;&lt;br /&gt;
int maxprio=0;&lt;br /&gt;
int occupato=0;&lt;br /&gt;
&lt;br /&gt;
procedure entry init(prio){	&lt;br /&gt;
	if(occupato==1)&lt;br /&gt;
	{&lt;br /&gt;
		if(maxprio &amp;lt; prio)&lt;br /&gt;
		{&lt;br /&gt;
		maxprio=prio;&lt;br /&gt;
		}&lt;br /&gt;
	waiting[prio]++;			&lt;br /&gt;
	run[prio].wait();&lt;br /&gt;
	waiting[prio]--;&lt;br /&gt;
	maxprio=aggiorna_maxprio(maxprio,prio,waiting);&lt;br /&gt;
	}&lt;br /&gt;
occupato=1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry yield(prio){&lt;br /&gt;
run[maxprio].signal();&lt;br /&gt;
        if(maxprio &amp;lt; prio)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=prio;&lt;br /&gt;
	}&lt;br /&gt;
waiting[prio]++;&lt;br /&gt;
run[prio].wait();&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
maxprio=aggiorna_maxprio(maxprio,prio,waiting);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry fini(prio){&lt;br /&gt;
occupato=0;&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
maxprio=aggiorna_maxprio(maxprio,prio,waiting);		&lt;br /&gt;
run[maxprio].signal();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//Processo con prioritá 0 = Processo con piú alta prioritá&lt;br /&gt;
//Processo con prioritá 9 = Processo con meno prioritá&lt;br /&gt;
monitor priocoop {&lt;br /&gt;
	condition oktogo[10];&lt;br /&gt;
	int wait[10] = 0,0,0,0,0,0,0,0,0;&lt;br /&gt;
	int running;&lt;br /&gt;
	priocoop.init(prio) {&lt;br /&gt;
		if(running != 0) {&lt;br /&gt;
			wait[prio]++;&lt;br /&gt;
			oktogo[prio].wait;&lt;br /&gt;
			wait[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.yield(prio) {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				wait[prio]++;&lt;br /&gt;
				oktogo[prio].wait;&lt;br /&gt;
				wait[prio]--;&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.fini() {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//0: priorita' maggiore&lt;br /&gt;
//9: priorita' minore&lt;br /&gt;
cond oktoenter[10];&lt;br /&gt;
int count[10];&lt;br /&gt;
bool running = false;&lt;br /&gt;
&lt;br /&gt;
//restituisce la priorita' maggiore che ha un processo in attesa&lt;br /&gt;
getprio() {&lt;br /&gt;
      	for(i=0;i&amp;lt;10;i++) {&lt;br /&gt;
		 if(count[i]&amp;gt;0)&lt;br /&gt;
			 break;&lt;br /&gt;
	 }&lt;br /&gt;
	 return i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
priocoop() {&lt;br /&gt;
	init (prio) {&lt;br /&gt;
		if (running) {&lt;br /&gt;
			count[prio]++;&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
		running = true;&lt;br /&gt;
	}&lt;br /&gt;
	yield(prio) {&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if (i &amp;lt; 10) {&lt;br /&gt;
			// running = false; &lt;br /&gt;
			oktoenter[i].signal();&lt;br /&gt;
			count(prio)++&lt;br /&gt;
			oktoenter[proc].wait();&lt;br /&gt;
	                // running = true;&lt;br /&gt;
        	        count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	fini(prio){&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if(i&amp;lt;10)&lt;br /&gt;
			oktoenter[i].signal;&lt;br /&gt;
		else&lt;br /&gt;
			running=false;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Stefano B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
	condition oktoenter[10];&lt;br /&gt;
	queue waiting[10];&lt;br /&gt;
	&lt;br /&gt;
	procedure entry init(int prio){&lt;br /&gt;
		if(!(prio &amp;gt;= 0 &amp;amp;&amp;amp; prio&amp;lt;=9))&lt;br /&gt;
			exit(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry yield(int prio){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
		if(priority&amp;gt;=0){ /* se non ci fosse questo controllo avremmo un caso di deadlock&lt;br /&gt;
						  * in quanto le code sono vuote */&lt;br /&gt;
			waiting[prio].enqueue();&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			waiting[prio].dequeue(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry fini(){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Francesca e Giulia&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
db.getpriortymax(); //funzione che restituisce il messaggio con prioritá maggiore e lo rimuove dal db o 0 nel caso il db sia vuoto&lt;br /&gt;
Process n: {&lt;br /&gt;
&lt;br /&gt;
	psend(dest, prio,msg) {&lt;br /&gt;
		asend((msg, prio),dest);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	precv(sender) {&lt;br /&gt;
		while((msg,prio) = arecv(sender)) {&lt;br /&gt;
			db[sender].insert((msg,prio));&lt;br /&gt;
		}&lt;br /&gt;
		return (db[sender].getpriortymax());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Esercizio 3 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
lock=-1;&lt;br /&gt;
&lt;br /&gt;
Process P[i]{&lt;br /&gt;
while(true){&lt;br /&gt;
  do{;}&lt;br /&gt;
  while(twomult.op(lock)!=lock);&lt;br /&gt;
  //critical section&lt;br /&gt;
  lock = -lock;&lt;br /&gt;
  //no critical section&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inizialmente:  a=1;   b=1;&lt;br /&gt;
&lt;br /&gt;
Primo processo:&lt;br /&gt;
lock=-1   a=-1   b=1&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
&lt;br /&gt;
Secondo processo:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Siccome lock==b non esce dal while e continua:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Si ripeterano sempre gli stessi valori,&lt;br /&gt;
fino al cambio di valore di lock che passa da&lt;br /&gt;
-1 a 1  così :&lt;br /&gt;
lock=1  a=-1  b=-1;&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
Mentre l'altro processo si bloccherà poichè:&lt;br /&gt;
lock=1  a=1  b=1;&lt;br /&gt;
fino al ritorno di lock al valore -1;&lt;br /&gt;
lock=-1  a=-1  b=1;&lt;br /&gt;
C.V.D&lt;br /&gt;
&lt;br /&gt;
----Alessandro&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=544</id>
		<title>ProvaPratica 2010.07.12</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=544"/>
		<updated>2014-04-02T09:00:52Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: /* Esercizio 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
int aggiorna_maxprio(int maxprio,int prio,int waiting[]){&lt;br /&gt;
int i;&lt;br /&gt;
if(waiting[maxprio] == 0)&lt;br /&gt;
	{&lt;br /&gt;
       	maxprio=0;&lt;br /&gt;
		for(i=prio;i&amp;gt;=0;i--)&lt;br /&gt;
		{&lt;br /&gt;
			if(waiting[i]!=0)&lt;br /&gt;
			{&lt;br /&gt;
			maxprio=i;&lt;br /&gt;
			break;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
return maxprio;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
condition run[10];&lt;br /&gt;
int waiting[10]=0,0,0,0,0,0,0,0,0,0;&lt;br /&gt;
int maxprio=0;&lt;br /&gt;
int occupato=0;&lt;br /&gt;
&lt;br /&gt;
procedure entry init(prio){	&lt;br /&gt;
	if(occupato==1)&lt;br /&gt;
	{&lt;br /&gt;
		if(maxprio &amp;lt; prio)&lt;br /&gt;
		{&lt;br /&gt;
		maxprio=prio;&lt;br /&gt;
		}&lt;br /&gt;
	waiting[prio]++;			&lt;br /&gt;
	run[prio].wait();&lt;br /&gt;
	waiting[prio]--;&lt;br /&gt;
	maxprio=aggiorna_maxprio(maxprio,prio,waiting);&lt;br /&gt;
	}&lt;br /&gt;
occupato=1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry yield(prio){&lt;br /&gt;
run[maxprio].signal();&lt;br /&gt;
        if(maxprio &amp;lt; prio)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=prio;&lt;br /&gt;
	}&lt;br /&gt;
waiting[prio]++;&lt;br /&gt;
run[prio].wait();&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
maxprio=aggiorna_maxprio(maxprio,prio,waiting);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry fini(prio){&lt;br /&gt;
occupato=0;&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
maxprio=aggiorna_maxprio(maxprio,prio,waiting);		&lt;br /&gt;
run[maxprio].signal();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//Processo con prioritá 0 = Processo con piú alta prioritá&lt;br /&gt;
//Processo con prioritá 9 = Processo con meno prioritá&lt;br /&gt;
monitor priocoop {&lt;br /&gt;
	condition oktogo[10];&lt;br /&gt;
	int wait[10] = 0,0,0,0,0,0,0,0,0;&lt;br /&gt;
	int running;&lt;br /&gt;
	priocoop.init(prio) {&lt;br /&gt;
		if(running != 0) {&lt;br /&gt;
			wait[prio]++;&lt;br /&gt;
			oktogo[prio].wait;&lt;br /&gt;
			wait[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.yield(prio) {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				wait[prio]++;&lt;br /&gt;
				oktogo[prio].wait;&lt;br /&gt;
				wait[prio]--;&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.fini() {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//0: priorita' maggiore&lt;br /&gt;
//9: priorita' minore&lt;br /&gt;
cond oktoenter[10];&lt;br /&gt;
int count[10];&lt;br /&gt;
bool running = false;&lt;br /&gt;
&lt;br /&gt;
//restituisce la priorita' maggiore che ha un processo in attesa&lt;br /&gt;
getprio() {&lt;br /&gt;
      	for(i=0;i&amp;lt;10;i++) {&lt;br /&gt;
		 if(count[i]&amp;gt;0)&lt;br /&gt;
			 break;&lt;br /&gt;
	 }&lt;br /&gt;
	 return i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
priocoop() {&lt;br /&gt;
	init (prio) {&lt;br /&gt;
		if (running) {&lt;br /&gt;
			count[prio]++;&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
		running = true;&lt;br /&gt;
	}&lt;br /&gt;
	yield(prio) {&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if (i &amp;lt; 10) {&lt;br /&gt;
			// running = false; &lt;br /&gt;
			oktoenter[i].signal();&lt;br /&gt;
			count(prio)++&lt;br /&gt;
			oktoenter[proc].wait();&lt;br /&gt;
	                // running = true;&lt;br /&gt;
        	        count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	fini(prio){&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if(i&amp;lt;10)&lt;br /&gt;
			oktoenter[i].signal;&lt;br /&gt;
		else&lt;br /&gt;
			running=false;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Stefano B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
	condition oktoenter[10];&lt;br /&gt;
	queue waiting[10];&lt;br /&gt;
	&lt;br /&gt;
	procedure entry init(int prio){&lt;br /&gt;
		if(!(prio &amp;gt;= 0 &amp;amp;&amp;amp; prio&amp;lt;=9))&lt;br /&gt;
			exit(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry yield(int prio){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
		if(priority&amp;gt;=0){ /* se non ci fosse questo controllo avremmo un caso di deadlock&lt;br /&gt;
						  * in quanto le code sono vuote */&lt;br /&gt;
			waiting[prio].enqueue();&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			waiting[prio].dequeue(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry fini(){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Francesca e Giulia&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
db.getpriortymax(); //funzione che restituisce il messaggio con prioritá maggiore e lo rimuove dal db o 0 nel caso il db sia vuoto&lt;br /&gt;
Process n: {&lt;br /&gt;
&lt;br /&gt;
	psend(dest, prio,msg) {&lt;br /&gt;
		asend((msg, prio),dest);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	precv(sender) {&lt;br /&gt;
		while((msg,prio) = arecv(sender)) {&lt;br /&gt;
			db[sender].insert((msg,prio));&lt;br /&gt;
		}&lt;br /&gt;
		return (db[sender].getpriortymax());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Esercizio 3 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
lock=-1;&lt;br /&gt;
&lt;br /&gt;
Process P[i]{&lt;br /&gt;
int vp;&lt;br /&gt;
while(true){&lt;br /&gt;
  do{;}&lt;br /&gt;
  while(twomult.op(lock)!=lock);&lt;br /&gt;
  //critical section&lt;br /&gt;
  lock = -lock;&lt;br /&gt;
  //no critical section&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inizialmente:  a=1;   b=1;&lt;br /&gt;
&lt;br /&gt;
Primo processo:&lt;br /&gt;
lock=-1   a=-1   b=1&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
&lt;br /&gt;
Secondo processo:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Siccome lock==b non esce dal while e continua:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Si ripeterano sempre gli stessi valori,&lt;br /&gt;
fino al cambio di valore di lock che passa da&lt;br /&gt;
-1 a 1  così :&lt;br /&gt;
lock=1  a=-1  b=-1;&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
Mentre l'altro processo si bloccherà poichè:&lt;br /&gt;
lock=1  a=1  b=1;&lt;br /&gt;
fino al ritorno di lock al valore -1;&lt;br /&gt;
lock=-1  a=-1  b=1;&lt;br /&gt;
C.V.D&lt;br /&gt;
&lt;br /&gt;
----Alessandro&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=543</id>
		<title>ProvaPratica 2010.07.12</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=543"/>
		<updated>2014-04-02T08:39:07Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: /* Esercizio 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
condition run[9];&lt;br /&gt;
int waiting[9]=0,0,0,0,0,0,0,0,0;&lt;br /&gt;
int maxprio=0;&lt;br /&gt;
int occupato=0;&lt;br /&gt;
&lt;br /&gt;
procedure entry init(prio){	&lt;br /&gt;
	if(occupato==1)&lt;br /&gt;
	{&lt;br /&gt;
		if(maxprio &amp;lt; prio)&lt;br /&gt;
		{&lt;br /&gt;
		maxprio=prio;&lt;br /&gt;
		}&lt;br /&gt;
	waiting[prio]++;			&lt;br /&gt;
	run[prio].wait();&lt;br /&gt;
	waiting[prio]--;&lt;br /&gt;
	}&lt;br /&gt;
occupato=1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry yield(prio){&lt;br /&gt;
run[maxprio].signal();&lt;br /&gt;
        if(maxprio &amp;lt; prio)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=prio;&lt;br /&gt;
	}&lt;br /&gt;
waiting[prio]++;&lt;br /&gt;
run[prio].wait();&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry fini(prio){&lt;br /&gt;
int i;&lt;br /&gt;
occupato=0;&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
	if(waiting[maxprio] == 0)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=0;&lt;br /&gt;
		for(i=prio;i&amp;gt;=0;i--)&lt;br /&gt;
		{&lt;br /&gt;
			if(waiting[i]!=0)&lt;br /&gt;
			{&lt;br /&gt;
			maxprio=0;&lt;br /&gt;
			}&lt;br /&gt;
		}		&lt;br /&gt;
	run[maxprio].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//Processo con prioritá 0 = Processo con piú alta prioritá&lt;br /&gt;
//Processo con prioritá 9 = Processo con meno prioritá&lt;br /&gt;
monitor priocoop {&lt;br /&gt;
	condition oktogo[10];&lt;br /&gt;
	int wait[10] = 0,0,0,0,0,0,0,0,0;&lt;br /&gt;
	int running;&lt;br /&gt;
	priocoop.init(prio) {&lt;br /&gt;
		if(running != 0) {&lt;br /&gt;
			wait[prio]++;&lt;br /&gt;
			oktogo[prio].wait;&lt;br /&gt;
			wait[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.yield(prio) {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				wait[prio]++;&lt;br /&gt;
				oktogo[prio].wait;&lt;br /&gt;
				wait[prio]--;&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.fini() {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//0: priorita' maggiore&lt;br /&gt;
//9: priorita' minore&lt;br /&gt;
cond oktoenter[10];&lt;br /&gt;
int count[10];&lt;br /&gt;
bool running = false;&lt;br /&gt;
&lt;br /&gt;
//restituisce la priorita' maggiore che ha un processo in attesa&lt;br /&gt;
getprio() {&lt;br /&gt;
      	for(i=0;i&amp;lt;10;i++) {&lt;br /&gt;
		 if(count[i]&amp;gt;0)&lt;br /&gt;
			 break;&lt;br /&gt;
	 }&lt;br /&gt;
	 return i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
priocoop() {&lt;br /&gt;
	init (prio) {&lt;br /&gt;
		if (running) {&lt;br /&gt;
			count[prio]++;&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
		running = true;&lt;br /&gt;
	}&lt;br /&gt;
	yield(prio) {&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if (i &amp;lt; 10) {&lt;br /&gt;
			// running = false; &lt;br /&gt;
			oktoenter[i].signal();&lt;br /&gt;
			count(prio)++&lt;br /&gt;
			oktoenter[proc].wait();&lt;br /&gt;
	                // running = true;&lt;br /&gt;
        	        count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	fini(prio){&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if(i&amp;lt;10)&lt;br /&gt;
			oktoenter[i].signal;&lt;br /&gt;
		else&lt;br /&gt;
			running=false;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Stefano B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
	condition oktoenter[10];&lt;br /&gt;
	queue waiting[10];&lt;br /&gt;
	&lt;br /&gt;
	procedure entry init(int prio){&lt;br /&gt;
		if(!(prio &amp;gt;= 0 &amp;amp;&amp;amp; prio&amp;lt;=9))&lt;br /&gt;
			exit(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry yield(int prio){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
		if(priority&amp;gt;=0){ /* se non ci fosse questo controllo avremmo un caso di deadlock&lt;br /&gt;
						  * in quanto le code sono vuote */&lt;br /&gt;
			waiting[prio].enqueue();&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			waiting[prio].dequeue(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry fini(){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Francesca e Giulia&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
db.getpriortymax(); //funzione che restituisce il messaggio con prioritá maggiore e lo rimuove dal db o 0 nel caso il db sia vuoto&lt;br /&gt;
Process n: {&lt;br /&gt;
&lt;br /&gt;
	psend(dest, prio,msg) {&lt;br /&gt;
		asend((msg, prio),dest);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	precv(sender) {&lt;br /&gt;
		while((msg,prio) = arecv(sender)) {&lt;br /&gt;
			db[sender].insert((msg,prio));&lt;br /&gt;
		}&lt;br /&gt;
		return (db[sender].getpriortymax());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Esercizio 3 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
lock=-1;&lt;br /&gt;
&lt;br /&gt;
Process P[i]{&lt;br /&gt;
int vp;&lt;br /&gt;
while(true){&lt;br /&gt;
  do{;}&lt;br /&gt;
  while(twomult.op(lock)!=lock);&lt;br /&gt;
  //critical section&lt;br /&gt;
  lock = -lock;&lt;br /&gt;
  //no critical section&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inizialmente:  a=1;   b=1;&lt;br /&gt;
&lt;br /&gt;
Primo processo:&lt;br /&gt;
lock=-1   a=-1   b=1&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
&lt;br /&gt;
Secondo processo:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Siccome lock==b non esce dal while e continua:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Si ripeterano sempre gli stessi valori,&lt;br /&gt;
fino al cambio di valore di lock che passa da&lt;br /&gt;
-1 a 1  così :&lt;br /&gt;
lock=1  a=-1  b=-1;&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
Mentre l'altro processo si bloccherà poichè:&lt;br /&gt;
lock=1  a=1  b=1;&lt;br /&gt;
fino al ritorno di lock al valore -1;&lt;br /&gt;
lock=-1  a=-1  b=1;&lt;br /&gt;
C.V.D&lt;br /&gt;
&lt;br /&gt;
----Alessandro&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=542</id>
		<title>ProvaPratica 2010.07.12</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=542"/>
		<updated>2014-04-02T08:38:09Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: /* Esercizio 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
condition run[9];&lt;br /&gt;
int waiting[9]=0,0,0,0,0,0,0,0,0;&lt;br /&gt;
int maxprio=0;&lt;br /&gt;
int occupato=0;&lt;br /&gt;
&lt;br /&gt;
procedure entry init(prio){	&lt;br /&gt;
	if(occupato==1)&lt;br /&gt;
	{&lt;br /&gt;
		if(maxprio &amp;lt; prio)&lt;br /&gt;
		{&lt;br /&gt;
		maxprio=prio;&lt;br /&gt;
		}&lt;br /&gt;
	waiting[prio]++;			&lt;br /&gt;
	run[prio].wait();&lt;br /&gt;
	waiting[prio]--;&lt;br /&gt;
	}&lt;br /&gt;
occupato=1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry yield(prio){&lt;br /&gt;
run[maxprio].signal();&lt;br /&gt;
        if(maxprio &amp;lt; prio)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=prio;&lt;br /&gt;
	}&lt;br /&gt;
waiting[prio]++;&lt;br /&gt;
run[prio].wait();&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry fini(prio){&lt;br /&gt;
int i;&lt;br /&gt;
occupato=0;&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
	if(waiting[maxprio] == 0)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=0;&lt;br /&gt;
		for(i=prio;i&amp;gt;=0;i--)&lt;br /&gt;
		{&lt;br /&gt;
			if(waiting[i]!=0)&lt;br /&gt;
			{&lt;br /&gt;
			maxprio=0;&lt;br /&gt;
			}&lt;br /&gt;
		}		&lt;br /&gt;
	run[maxprio].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//Processo con prioritá 0 = Processo con piú alta prioritá&lt;br /&gt;
//Processo con prioritá 9 = Processo con meno prioritá&lt;br /&gt;
monitor priocoop {&lt;br /&gt;
	condition oktogo[10];&lt;br /&gt;
	int wait[10] = 0,0,0,0,0,0,0,0,0;&lt;br /&gt;
	int running;&lt;br /&gt;
	priocoop.init(prio) {&lt;br /&gt;
		if(running != 0) {&lt;br /&gt;
			wait[prio]++;&lt;br /&gt;
			oktogo[prio].wait;&lt;br /&gt;
			wait[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.yield(prio) {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				wait[prio]++;&lt;br /&gt;
				oktogo[prio].wait;&lt;br /&gt;
				wait[prio]--;&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.fini() {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//0: priorita' maggiore&lt;br /&gt;
//9: priorita' minore&lt;br /&gt;
cond oktoenter[10];&lt;br /&gt;
int count[10];&lt;br /&gt;
bool running = false;&lt;br /&gt;
&lt;br /&gt;
//restituisce la priorita' maggiore che ha un processo in attesa&lt;br /&gt;
getprio() {&lt;br /&gt;
      	for(i=0;i&amp;lt;10;i++) {&lt;br /&gt;
		 if(count[i]&amp;gt;0)&lt;br /&gt;
			 break;&lt;br /&gt;
	 }&lt;br /&gt;
	 return i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
priocoop() {&lt;br /&gt;
	init (prio) {&lt;br /&gt;
		if (running) {&lt;br /&gt;
			count[prio]++;&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
		running = true;&lt;br /&gt;
	}&lt;br /&gt;
	yield(prio) {&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if (i &amp;lt; 10) {&lt;br /&gt;
			// running = false; &lt;br /&gt;
			oktoenter[i].signal();&lt;br /&gt;
			count(prio)++&lt;br /&gt;
			oktoenter[proc].wait();&lt;br /&gt;
	                // running = true;&lt;br /&gt;
        	        count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	fini(prio){&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if(i&amp;lt;10)&lt;br /&gt;
			oktoenter[i].signal;&lt;br /&gt;
		else&lt;br /&gt;
			running=false;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Stefano B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
	condition oktoenter[10];&lt;br /&gt;
	queue waiting[10];&lt;br /&gt;
	&lt;br /&gt;
	procedure entry init(int prio){&lt;br /&gt;
		if(!(prio &amp;gt;= 0 &amp;amp;&amp;amp; prio&amp;lt;=9))&lt;br /&gt;
			exit(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry yield(int prio){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
		if(priority&amp;gt;=0){ /* se non ci fosse questo controllo avremmo un caso di deadlock&lt;br /&gt;
						  * in quanto le code sono vuote */&lt;br /&gt;
			waiting[prio].enqueue();&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			waiting[prio].dequeue(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry fini(){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Francesca e Giulia&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
db.getpriortymax(); //funzione che restituisce il messaggio con prioritá maggiore e lo rimuove dal db o 0 nel caso il db sia vuoto&lt;br /&gt;
Process n: {&lt;br /&gt;
&lt;br /&gt;
	psend(dest, prio,msg) {&lt;br /&gt;
		asend((msg, prio),dest);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	precv(sender) {&lt;br /&gt;
		while((msg,prio) = arecv(sender)) {&lt;br /&gt;
			db[sender].insert((msg,prio));&lt;br /&gt;
		}&lt;br /&gt;
		return (db[sender].getpriortymax());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Esercizio 3 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
lock=-1;&lt;br /&gt;
&lt;br /&gt;
Process P[i]{&lt;br /&gt;
int vp;&lt;br /&gt;
while(true){&lt;br /&gt;
  do{;}&lt;br /&gt;
  while(twomult.op(lock)!=lock);&lt;br /&gt;
  //critical section&lt;br /&gt;
  lock = -lock;&lt;br /&gt;
  //no critical section&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inizialmente:  a=1;   b=1;&lt;br /&gt;
&lt;br /&gt;
Primo processo:&lt;br /&gt;
lock=-1   a=-1   b=1&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
&lt;br /&gt;
Secondo processo:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Siccome lock==b non esce dal while e continua:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Si ripeterano sempre gli stessi valori,&lt;br /&gt;
fino al cambio di valore di lock che passa da&lt;br /&gt;
-1 a 1  così :&lt;br /&gt;
lock=1  a=-1  b=-1;&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
Mentre l'altro processo si bloccherà poichè:&lt;br /&gt;
lock=1  a=1  b=1;&lt;br /&gt;
fino al ritorno di lock al valore -1;&lt;br /&gt;
lock=-1  a=-1  b=1;&lt;br /&gt;
C.V.D&lt;br /&gt;
&lt;br /&gt;
----Alessandro----&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=541</id>
		<title>ProvaPratica 2010.07.12</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=541"/>
		<updated>2014-04-02T08:36:51Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: /* Esercizio 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Esercizio 1 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
condition run[9];&lt;br /&gt;
int waiting[9]=0,0,0,0,0,0,0,0,0;&lt;br /&gt;
int maxprio=0;&lt;br /&gt;
int occupato=0;&lt;br /&gt;
&lt;br /&gt;
procedure entry init(prio){	&lt;br /&gt;
	if(occupato==1)&lt;br /&gt;
	{&lt;br /&gt;
		if(maxprio &amp;lt; prio)&lt;br /&gt;
		{&lt;br /&gt;
		maxprio=prio;&lt;br /&gt;
		}&lt;br /&gt;
	waiting[prio]++;			&lt;br /&gt;
	run[prio].wait();&lt;br /&gt;
	waiting[prio]--;&lt;br /&gt;
	}&lt;br /&gt;
occupato=1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry yield(prio){&lt;br /&gt;
run[maxprio].signal();&lt;br /&gt;
        if(maxprio &amp;lt; prio)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=prio;&lt;br /&gt;
	}&lt;br /&gt;
waiting[prio]++;&lt;br /&gt;
run[prio].wait();&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry fini(prio){&lt;br /&gt;
int i;&lt;br /&gt;
occupato=0;&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
	if(waiting[maxprio] == 0)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=0;&lt;br /&gt;
		for(i=prio;i&amp;gt;=0;i--)&lt;br /&gt;
		{&lt;br /&gt;
			if(waiting[i]!=0)&lt;br /&gt;
			{&lt;br /&gt;
			maxprio=0;&lt;br /&gt;
			}&lt;br /&gt;
		}		&lt;br /&gt;
	run[maxprio].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//Processo con prioritá 0 = Processo con piú alta prioritá&lt;br /&gt;
//Processo con prioritá 9 = Processo con meno prioritá&lt;br /&gt;
monitor priocoop {&lt;br /&gt;
	condition oktogo[10];&lt;br /&gt;
	int wait[10] = 0,0,0,0,0,0,0,0,0;&lt;br /&gt;
	int running;&lt;br /&gt;
	priocoop.init(prio) {&lt;br /&gt;
		if(running != 0) {&lt;br /&gt;
			wait[prio]++;&lt;br /&gt;
			oktogo[prio].wait;&lt;br /&gt;
			wait[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.yield(prio) {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				wait[prio]++;&lt;br /&gt;
				oktogo[prio].wait;&lt;br /&gt;
				wait[prio]--;&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		running++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	priocoop.fini() {&lt;br /&gt;
		running--;&lt;br /&gt;
		for(int i = 0;i&amp;lt;10;i++) {&lt;br /&gt;
			if(wait[i] != 0) {&lt;br /&gt;
				oktogo[i].signal();&lt;br /&gt;
				break();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
//0: priorita' maggiore&lt;br /&gt;
//9: priorita' minore&lt;br /&gt;
cond oktoenter[10];&lt;br /&gt;
int count[10];&lt;br /&gt;
bool running = false;&lt;br /&gt;
&lt;br /&gt;
//restituisce la priorita' maggiore che ha un processo in attesa&lt;br /&gt;
getprio() {&lt;br /&gt;
      	for(i=0;i&amp;lt;10;i++) {&lt;br /&gt;
		 if(count[i]&amp;gt;0)&lt;br /&gt;
			 break;&lt;br /&gt;
	 }&lt;br /&gt;
	 return i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
priocoop() {&lt;br /&gt;
	init (prio) {&lt;br /&gt;
		if (running) {&lt;br /&gt;
			count[prio]++;&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
		running = true;&lt;br /&gt;
	}&lt;br /&gt;
	yield(prio) {&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if (i &amp;lt; 10) {&lt;br /&gt;
			// running = false; &lt;br /&gt;
			oktoenter[i].signal();&lt;br /&gt;
			count(prio)++&lt;br /&gt;
			oktoenter[proc].wait();&lt;br /&gt;
	                // running = true;&lt;br /&gt;
        	        count[prio]--;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	fini(prio){&lt;br /&gt;
		i=getprio();&lt;br /&gt;
		if(i&amp;lt;10)&lt;br /&gt;
			oktoenter[i].signal;&lt;br /&gt;
		else&lt;br /&gt;
			running=false;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Stefano B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
	condition oktoenter[10];&lt;br /&gt;
	queue waiting[10];&lt;br /&gt;
	&lt;br /&gt;
	procedure entry init(int prio){&lt;br /&gt;
		if(!(prio &amp;gt;= 0 &amp;amp;&amp;amp; prio&amp;lt;=9))&lt;br /&gt;
			exit(0);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry yield(int prio){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
		if(priority&amp;gt;=0){ /* se non ci fosse questo controllo avremmo un caso di deadlock&lt;br /&gt;
						  * in quanto le code sono vuote */&lt;br /&gt;
			waiting[prio].enqueue();&lt;br /&gt;
			oktoenter[prio].wait();&lt;br /&gt;
			waiting[prio].dequeue(); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry fini(){&lt;br /&gt;
		int priority=-1;&lt;br /&gt;
		for (i=0; i&amp;lt;10; i++) {&lt;br /&gt;
			if (! waiting[i].isempty())&lt;br /&gt;
				priority=i;&lt;br /&gt;
		}&lt;br /&gt;
		oktoenter[priority].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Francesca e Giulia&lt;br /&gt;
&lt;br /&gt;
== Esercizio 2 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
db.getpriortymax(); //funzione che restituisce il messaggio con prioritá maggiore e lo rimuove dal db o 0 nel caso il db sia vuoto&lt;br /&gt;
Process n: {&lt;br /&gt;
&lt;br /&gt;
	psend(dest, prio,msg) {&lt;br /&gt;
		asend((msg, prio),dest);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	precv(sender) {&lt;br /&gt;
		while((msg,prio) = arecv(sender)) {&lt;br /&gt;
			db[sender].insert((msg,prio));&lt;br /&gt;
		}&lt;br /&gt;
		return (db[sender].getpriortymax());&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Esercizio 3 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
lock=-1;&lt;br /&gt;
&lt;br /&gt;
Process P[i]{&lt;br /&gt;
int vp;&lt;br /&gt;
while(true){&lt;br /&gt;
  do{;}&lt;br /&gt;
  while(twomult.op(lock)!=lock);&lt;br /&gt;
  //critical section&lt;br /&gt;
  lock = -lock;&lt;br /&gt;
  //no critical section&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inizialmente:  a=1;   b=1;&lt;br /&gt;
&lt;br /&gt;
Primo processo:&lt;br /&gt;
lock=-1   a=-1   b=1&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
&lt;br /&gt;
Secondo processo:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Siccome lock==b non esce dal while e continua:&lt;br /&gt;
lock=-1  a=1   b=-1&lt;br /&gt;
Si ripeterano sempre gli stessi valori,&lt;br /&gt;
fino al cambio di valore di lock che passa da&lt;br /&gt;
-1 a 1  così :&lt;br /&gt;
lock=1  a=-1  b=-1;&lt;br /&gt;
Siccome lock!=b esce dal while.&lt;br /&gt;
Mentre l'altro processo si bloccherà poichè:&lt;br /&gt;
lock=1  a=1  b=1;&lt;br /&gt;
fino al ritorno di lock al valore -1;&lt;br /&gt;
lock=-1  a=-1  b=1;&lt;br /&gt;
C.V.D&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=529</id>
		<title>ProvaPratica 2010.07.12</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaPratica_2010.07.12&amp;diff=529"/>
		<updated>2014-03-31T21:41:30Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: Created page with &amp;quot;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf&amp;lt;/h1&amp;gt;   &amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;  monitor priocoop{ condition run[9]; int waiting[9]=0,0,0,0,0,0,0,0,0; int ma...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
monitor priocoop{&lt;br /&gt;
condition run[9];&lt;br /&gt;
int waiting[9]=0,0,0,0,0,0,0,0,0;&lt;br /&gt;
int maxprio=0;&lt;br /&gt;
int occupato=0;&lt;br /&gt;
&lt;br /&gt;
procedure entry init(prio){	&lt;br /&gt;
	if(occupato==1)&lt;br /&gt;
	{&lt;br /&gt;
		if(maxprio &amp;lt; prio)&lt;br /&gt;
		{&lt;br /&gt;
		maxprio=prio;&lt;br /&gt;
		}&lt;br /&gt;
	waiting[prio]++;			&lt;br /&gt;
	run[prio].wait();&lt;br /&gt;
	waiting[prio]--;&lt;br /&gt;
	}&lt;br /&gt;
occupato=1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry yield(prio){&lt;br /&gt;
run[maxprio].signal();&lt;br /&gt;
        if(maxprio &amp;lt; prio)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=prio;&lt;br /&gt;
	}&lt;br /&gt;
waiting[prio]++;&lt;br /&gt;
run[prio].wait();&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry fini(prio){&lt;br /&gt;
int i;&lt;br /&gt;
occupato=0;&lt;br /&gt;
waiting[prio]--;&lt;br /&gt;
	if(waiting[maxprio] == 0)&lt;br /&gt;
	{&lt;br /&gt;
	maxprio=0;&lt;br /&gt;
		for(i=prio;i&amp;gt;=0;i--)&lt;br /&gt;
		{&lt;br /&gt;
			if(waiting[i]!=0)&lt;br /&gt;
			{&lt;br /&gt;
			maxprio=0;&lt;br /&gt;
			}&lt;br /&gt;
		}		&lt;br /&gt;
	run[maxprio].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.07.16&amp;diff=520</id>
		<title>ProvaTeorica 2012.07.16</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.07.16&amp;diff=520"/>
		<updated>2014-03-28T22:49:44Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.cs.unibo.it/~renzo/so/compiti/2012-07-16.tot.pdf Link Testo]&lt;br /&gt;
&amp;lt;h2&amp;gt;Esercizio C.2&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mia Soluzione:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#define RED 0&lt;br /&gt;
#define BLUE 1&lt;br /&gt;
//restituisce 1 se c'e piu del 75% blue o 75% di red&lt;br /&gt;
//restituisce 0 se non c'e una maggiornza&lt;br /&gt;
int media(color){&lt;br /&gt;
	int mediared;&lt;br /&gt;
	int localinto =  into;&lt;br /&gt;
	if (color != NULL){&lt;br /&gt;
		localinto[color]++;&lt;br /&gt;
	}&lt;br /&gt;
	mediared = ((100*localinto[0])/(localinto[0]+localinto[1]));&lt;br /&gt;
	if(mediared &amp;gt;=75 || mediared &amp;lt; 25){&lt;br /&gt;
		return 1;//75% di rossi o di blue&lt;br /&gt;
	}else{&lt;br /&gt;
		return 0;// non c'e maggioranza		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
monitor limcol{&lt;br /&gt;
&lt;br /&gt;
	conditon oktoenter[2];&lt;br /&gt;
	int into[2];&lt;br /&gt;
&lt;br /&gt;
	enter(color){&lt;br /&gt;
		if(media(color) != 1){// attendo perche' non c'e una maggioranza&lt;br /&gt;
			oktoenter[color].wait();&lt;br /&gt;
		}&lt;br /&gt;
		into[color]++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	exit(color){&lt;br /&gt;
		into[color]--;&lt;br /&gt;
		if(media(1-color) == 1){&lt;br /&gt;
			oktoenter[1-color].signal();&lt;br /&gt;
		}else if(media(color) == 1){&lt;br /&gt;
			oktoenter[color].signal();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
- Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#define ROSSO 0&lt;br /&gt;
#define BLU 1&lt;br /&gt;
&lt;br /&gt;
monitor limcol {&lt;br /&gt;
	condition oktoenter&lt;br /&gt;
	int running[2] // numero di processi rossi [0] e blu [1] in esecuzione&lt;br /&gt;
	queue waiting // coda dei colori dei processi in attesa&lt;br /&gt;
	&lt;br /&gt;
	/* restituisce true se aggiungendo un processo del colore passato viene rispettato il 75%&lt;br /&gt;
	dei processi di un colore */&lt;br /&gt;
	bool morethan75p(colore) { &lt;br /&gt;
		return (running[colore]+1&amp;gt;=running[1-colore]*3 || (running[colore]+1)*3&amp;lt;=running[1-colore])&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// risveglia un processo del colore passato se è possibile farlo&lt;br /&gt;
	void checkwakeup() {&lt;br /&gt;
		if (waiting.empty() == false) {&lt;br /&gt;
			colore=waiting.head() // head resituisce l'elemento in testa senza rimuoverlo&lt;br /&gt;
			if (morethan75p(colore)) { &lt;br /&gt;
				waiting.dequeue()&lt;br /&gt;
				oktoenter.signal()&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry enter(colore) {&lt;br /&gt;
		if (morethan75p(colore)==false) {&lt;br /&gt;
			waiting.enqueue(colore)&lt;br /&gt;
			oktoenter.wait()&lt;br /&gt;
		}&lt;br /&gt;
		running[colore]++&lt;br /&gt;
		checkwakeup()&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry exit(colore) {&lt;br /&gt;
		running[colore]--&lt;br /&gt;
		checkwakeup()&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* la politica FIFO impedisce che si verifichi starvation, perché nel caso pessimo un processo&lt;br /&gt;
che vuole entrare dovrà attendere fino a che tutti quelli in esecuzione terminino */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Daniele Cortesi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
define RED 0&lt;br /&gt;
define BLUE 1&lt;br /&gt;
int majorcolor = -1&lt;br /&gt;
int numproc[2] = 0,0&lt;br /&gt;
cond oktoenter[2]  //bastavano due condizioni.&lt;br /&gt;
cond oktoexit[2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor limcol{&lt;br /&gt;
	procedure entry enter(COL){&lt;br /&gt;
		if(COL == majorcolor){&lt;br /&gt;
			numproc[COL]++&lt;br /&gt;
			if(((proc[majorcolor])*100/(numproc[COL] + numproc[1-COL] + 1)) &amp;gt;= 75)&lt;br /&gt;
				oktoenter[1-COL].signal()&lt;br /&gt;
		}&lt;br /&gt;
		else if(COL == 1-majorcolor){&lt;br /&gt;
			if((proc[majorcolor]*100/(numproc[COL] + numproc[1-COL] + 1)) &amp;lt; 75)&lt;br /&gt;
				oktoenter[COL].wait()&lt;br /&gt;
			if(majorcolor == -1)&lt;br /&gt;
				majorcolor == COL&lt;br /&gt;
			numproc[COL]++&lt;br /&gt;
		}&lt;br /&gt;
		else{&lt;br /&gt;
			numproc[COL]++&lt;br /&gt;
			majorcolor = COL&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	procedure entry exit(COL){&lt;br /&gt;
		if(numproc[COL] + numproc[1-COL] == 1){&lt;br /&gt;
			majorcolor = -1&lt;br /&gt;
			numproc[COL]--&lt;br /&gt;
			oktoenter[1-COL].signal()&lt;br /&gt;
		}&lt;br /&gt;
		else if(COL == majorcolor){&lt;br /&gt;
			if(((proc[majorcolor] - 1)*100/(numproc[COL] + numproc[1-COL] - 1)) &amp;lt; 75){&lt;br /&gt;
				oktoexit[COL].wait()&lt;br /&gt;
			numproc[COL]--&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else if(COL == 1-majorcolor){&lt;br /&gt;
			numproc[COL]--&lt;br /&gt;
			if(((proc[majorcolor])*100/(numproc[COL] + numproc[1-COL] - 1)) &amp;gt;= 75)&lt;br /&gt;
				oktoexit[1-COL].signal()&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fede&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
define RED 0&lt;br /&gt;
define BLU 1&lt;br /&gt;
&lt;br /&gt;
limcol{&lt;br /&gt;
	/*variable*/&lt;br /&gt;
	int array[2] = 0,0;&lt;br /&gt;
	color major = -1;&lt;br /&gt;
	/*condition*/&lt;br /&gt;
	condition oktoenter[2];&lt;br /&gt;
	condition oktoleave[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	procedure entry enter( color ){&lt;br /&gt;
		if ( majorcolor == -1 ) &lt;br /&gt;
			majorcolor = color;&lt;br /&gt;
		if ( majorcolor == (1-color) &amp;amp;&amp;amp; newmajorcolor%(color) &amp;lt; 75% )&lt;br /&gt;
			oktoenter[color].wait();&lt;br /&gt;
		array[color]++; &lt;br /&gt;
		if ( majorcolor == -1 )            //se un processo si risveglia nel monitor vuoto deve impostare majorcolor&lt;br /&gt;
			majorcolor = color;&lt;br /&gt;
		if ( newmajorcolor%(1-color) &amp;gt;= 75% )         &lt;br /&gt;
			oktoenter[1-color].signal();&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
	procedure entry exit( color ){&lt;br /&gt;
		if ( majorcolor == color &amp;amp;&amp;amp; majorcolor_less1%(color) &amp;gt; 75% )&lt;br /&gt;
			oktoleave[color].wait();&lt;br /&gt;
		array[color]--;&lt;br /&gt;
		if ( !colorsempty() )&lt;br /&gt;
			if ( majorcolor_less1%(color) &amp;gt;= 75% )&lt;br /&gt;
				oktoleave[1-color].signal();&lt;br /&gt;
		else{&lt;br /&gt;
			majorcolor == -1;&lt;br /&gt;
			oktoenter[1-color].signal();&lt;br /&gt;
				}&lt;br /&gt;
					}	 &lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
newmajorcolor%(color) calcola la nuova % del colore maggiore aggiungendo color&lt;br /&gt;
majorcolor_less1%(color) calcola la nuova % del colore maggiore togliendo color&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pir@t@&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#DEFINE BLUE 0&lt;br /&gt;
#DEFINE RED 1&lt;br /&gt;
monitor limcol{&lt;br /&gt;
condition ok;&lt;br /&gt;
int numcolor[2];&lt;br /&gt;
Queue q;&lt;br /&gt;
int i=1;&lt;br /&gt;
procedure entry enter(color){&lt;br /&gt;
if((numcolor[color] + 1 &amp;lt; float((tot+1)*(75/100))  &amp;amp;&amp;amp;&lt;br /&gt;
   numcolor[color] + 1 &amp;gt;= float((tot+1)*(25/100))) ||&lt;br /&gt;
   !q.empty() ) &lt;br /&gt;
	{&lt;br /&gt;
	q.enqueue(color);&lt;br /&gt;
	ok.wait();&lt;br /&gt;
	i++;&lt;br /&gt;
	if(!q.empty()){&lt;br /&gt;
          if(numcolor[q.head()] + i &amp;gt;= float((tot+i)*(75/100)) ||&lt;br /&gt;
	   numcolor[q.head()] + i &amp;lt; float((tot+i)*(25/100)))  )&lt;br /&gt;
	{&lt;br /&gt;
	q.dequeue();&lt;br /&gt;
	ok.signal();&lt;br /&gt;
	}&lt;br /&gt;
	i=1;&lt;br /&gt;
	}&lt;br /&gt;
	}&lt;br /&gt;
numcolor[color]++;&lt;br /&gt;
tot++;&lt;br /&gt;
}&lt;br /&gt;
procedure entry exit(color){&lt;br /&gt;
numcolor[color]--;&lt;br /&gt;
tot--;&lt;br /&gt;
if( numcolor[q.head()] + 1 &amp;gt;= float((tot+1)*(75/100))  ||&lt;br /&gt;
    numcolor[q.head()] + 1 &amp;lt; float((tot+1)*(25/100)) )&lt;br /&gt;
  	{&lt;br /&gt;
	q.dequeue();&lt;br /&gt;
	ok.signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Esercizio g.1==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reference String&lt;br /&gt;
| 1 || 2 || 3 || 4 || 5 || 6 || 4 || 5 || 6 || 3 || 2 || 1 || 3 || 2 || 1 || 6 || 5 || 4 || 6 || 5 || 4 || 1 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
! Page Frame 1&lt;br /&gt;
| 1 || 1 || 1 || 4 || 4 || 4 ||   ||   ||   || 3 || 3 || 3 ||   ||   ||   || 6 || 6 || 6 ||   ||   ||   || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
! Page Frame 2&lt;br /&gt;
|   || 2 || 2 || 2 || 5 || 5 ||   ||   ||   || 5 || 2 || 2 ||   ||   ||   || 2 || 5 || 5 ||   ||   ||   || 5 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
! Page Frame 3&lt;br /&gt;
|   ||   || 3 || 3 || 3 || 6 ||   ||   ||   || 6 || 6 || 1 ||   ||   ||   || 1 || 1 || 4 ||   ||   ||   || 4 || 4 || 3&lt;br /&gt;
|}&lt;br /&gt;
                        &lt;br /&gt;
The above Reference String is both FIFO, LRU and MIN compliant.&lt;br /&gt;
&lt;br /&gt;
-TomOgn&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.07.16&amp;diff=519</id>
		<title>ProvaTeorica 2012.07.16</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.07.16&amp;diff=519"/>
		<updated>2014-03-28T21:56:59Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.cs.unibo.it/~renzo/so/compiti/2012-07-16.tot.pdf Link Testo]&lt;br /&gt;
&amp;lt;h2&amp;gt;Esercizio C.2&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mia Soluzione:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#define RED 0&lt;br /&gt;
#define BLUE 1&lt;br /&gt;
//restituisce 1 se c'e piu del 75% blue o 75% di red&lt;br /&gt;
//restituisce 0 se non c'e una maggiornza&lt;br /&gt;
int media(color){&lt;br /&gt;
	int mediared;&lt;br /&gt;
	int localinto =  into;&lt;br /&gt;
	if (color != NULL){&lt;br /&gt;
		localinto[color]++;&lt;br /&gt;
	}&lt;br /&gt;
	mediared = ((100*localinto[0])/(localinto[0]+localinto[1]));&lt;br /&gt;
	if(mediared &amp;gt;=75 || mediared &amp;lt; 25){&lt;br /&gt;
		return 1;//75% di rossi o di blue&lt;br /&gt;
	}else{&lt;br /&gt;
		return 0;// non c'e maggioranza		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
monitor limcol{&lt;br /&gt;
&lt;br /&gt;
	conditon oktoenter[2];&lt;br /&gt;
	int into[2];&lt;br /&gt;
&lt;br /&gt;
	enter(color){&lt;br /&gt;
		if(media(color) != 1){// attendo perche' non c'e una maggioranza&lt;br /&gt;
			oktoenter[color].wait();&lt;br /&gt;
		}&lt;br /&gt;
		into[color]++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	exit(color){&lt;br /&gt;
		into[color]--;&lt;br /&gt;
		if(media(1-color) == 1){&lt;br /&gt;
			oktoenter[1-color].signal();&lt;br /&gt;
		}else if(media(color) == 1){&lt;br /&gt;
			oktoenter[color].signal();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
- Midolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#define ROSSO 0&lt;br /&gt;
#define BLU 1&lt;br /&gt;
&lt;br /&gt;
monitor limcol {&lt;br /&gt;
	condition oktoenter&lt;br /&gt;
	int running[2] // numero di processi rossi [0] e blu [1] in esecuzione&lt;br /&gt;
	queue waiting // coda dei colori dei processi in attesa&lt;br /&gt;
	&lt;br /&gt;
	/* restituisce true se aggiungendo un processo del colore passato viene rispettato il 75%&lt;br /&gt;
	dei processi di un colore */&lt;br /&gt;
	bool morethan75p(colore) { &lt;br /&gt;
		return (running[colore]+1&amp;gt;=running[1-colore]*3 || (running[colore]+1)*3&amp;lt;=running[1-colore])&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// risveglia un processo del colore passato se è possibile farlo&lt;br /&gt;
	void checkwakeup() {&lt;br /&gt;
		if (waiting.empty() == false) {&lt;br /&gt;
			colore=waiting.head() // head resituisce l'elemento in testa senza rimuoverlo&lt;br /&gt;
			if (morethan75p(colore)) { &lt;br /&gt;
				waiting.dequeue()&lt;br /&gt;
				oktoenter.signal()&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry enter(colore) {&lt;br /&gt;
		if (morethan75p(colore)==false) {&lt;br /&gt;
			waiting.enqueue(colore)&lt;br /&gt;
			oktoenter.wait()&lt;br /&gt;
		}&lt;br /&gt;
		running[colore]++&lt;br /&gt;
		checkwakeup()&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry exit(colore) {&lt;br /&gt;
		running[colore]--&lt;br /&gt;
		checkwakeup()&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* la politica FIFO impedisce che si verifichi starvation, perché nel caso pessimo un processo&lt;br /&gt;
che vuole entrare dovrà attendere fino a che tutti quelli in esecuzione terminino */&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Daniele Cortesi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
define RED 0&lt;br /&gt;
define BLUE 1&lt;br /&gt;
int majorcolor = -1&lt;br /&gt;
int numproc[2] = 0,0&lt;br /&gt;
cond oktoenter[2]  //bastavano due condizioni.&lt;br /&gt;
cond oktoexit[2]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor limcol{&lt;br /&gt;
	procedure entry enter(COL){&lt;br /&gt;
		if(COL == majorcolor){&lt;br /&gt;
			numproc[COL]++&lt;br /&gt;
			if(((proc[majorcolor])*100/(numproc[COL] + numproc[1-COL] + 1)) &amp;gt;= 75)&lt;br /&gt;
				oktoenter[1-COL].signal()&lt;br /&gt;
		}&lt;br /&gt;
		else if(COL == 1-majorcolor){&lt;br /&gt;
			if((proc[majorcolor]*100/(numproc[COL] + numproc[1-COL] + 1)) &amp;lt; 75)&lt;br /&gt;
				oktoenter[COL].wait()&lt;br /&gt;
			if(majorcolor == -1)&lt;br /&gt;
				majorcolor == COL&lt;br /&gt;
			numproc[COL]++&lt;br /&gt;
		}&lt;br /&gt;
		else{&lt;br /&gt;
			numproc[COL]++&lt;br /&gt;
			majorcolor = COL&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	procedure entry exit(COL){&lt;br /&gt;
		if(numproc[COL] + numproc[1-COL] == 1){&lt;br /&gt;
			majorcolor = -1&lt;br /&gt;
			numproc[COL]--&lt;br /&gt;
			oktoenter[1-COL].signal()&lt;br /&gt;
		}&lt;br /&gt;
		else if(COL == majorcolor){&lt;br /&gt;
			if(((proc[majorcolor] - 1)*100/(numproc[COL] + numproc[1-COL] - 1)) &amp;lt; 75){&lt;br /&gt;
				oktoexit[COL].wait()&lt;br /&gt;
			numproc[COL]--&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else if(COL == 1-majorcolor){&lt;br /&gt;
			numproc[COL]--&lt;br /&gt;
			if(((proc[majorcolor])*100/(numproc[COL] + numproc[1-COL] - 1)) &amp;gt;= 75)&lt;br /&gt;
				oktoexit[1-COL].signal()&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fede&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
define RED 0&lt;br /&gt;
define BLU 1&lt;br /&gt;
&lt;br /&gt;
limcol{&lt;br /&gt;
	/*variable*/&lt;br /&gt;
	int array[2] = 0,0;&lt;br /&gt;
	color major = -1;&lt;br /&gt;
	/*condition*/&lt;br /&gt;
	condition oktoenter[2];&lt;br /&gt;
	condition oktoleave[2];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	procedure entry enter( color ){&lt;br /&gt;
		if ( majorcolor == -1 ) &lt;br /&gt;
			majorcolor = color;&lt;br /&gt;
		if ( majorcolor == (1-color) &amp;amp;&amp;amp; newmajorcolor%(color) &amp;lt; 75% )&lt;br /&gt;
			oktoenter[color].wait();&lt;br /&gt;
		array[color]++; &lt;br /&gt;
		if ( majorcolor == -1 )            //se un processo si risveglia nel monitor vuoto deve impostare majorcolor&lt;br /&gt;
			majorcolor = color;&lt;br /&gt;
		if ( newmajorcolor%(1-color) &amp;gt;= 75% )         &lt;br /&gt;
			oktoenter[1-color].signal();&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
	procedure entry exit( color ){&lt;br /&gt;
		if ( majorcolor == color &amp;amp;&amp;amp; majorcolor_less1%(color) &amp;gt; 75% )&lt;br /&gt;
			oktoleave[color].wait();&lt;br /&gt;
		array[color]--;&lt;br /&gt;
		if ( !colorsempty() )&lt;br /&gt;
			if ( majorcolor_less1%(color) &amp;gt;= 75% )&lt;br /&gt;
				oktoleave[1-color].signal();&lt;br /&gt;
		else{&lt;br /&gt;
			majorcolor == -1;&lt;br /&gt;
			oktoenter[1-color].signal();&lt;br /&gt;
				}&lt;br /&gt;
					}	 &lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
newmajorcolor%(color) calcola la nuova % del colore maggiore aggiungendo color&lt;br /&gt;
majorcolor_less1%(color) calcola la nuova % del colore maggiore togliendo color&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pir@t@&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#DEFINE BLUE 0&lt;br /&gt;
#DEFINE RED 1&lt;br /&gt;
monitor limcol{&lt;br /&gt;
condition ok;&lt;br /&gt;
int numcolor[2];&lt;br /&gt;
Queue q;&lt;br /&gt;
int i=1;&lt;br /&gt;
procedure entry enter(color){&lt;br /&gt;
if(numcolor[color] + 1 &amp;lt; float((tot+1)*(75/100))  ||&lt;br /&gt;
   numcolor[color] + 1 &amp;gt;= float((tot+1)*(25/100)) ||&lt;br /&gt;
   !q.empty() ) &lt;br /&gt;
	{&lt;br /&gt;
	q.enqueue(color);&lt;br /&gt;
	ok.wait();&lt;br /&gt;
	i++;&lt;br /&gt;
	if(!q.empty()){&lt;br /&gt;
          if(numcolor[q.head()] + i &amp;gt;= float((tot+i)*(75/100)) ||&lt;br /&gt;
	   numcolor[q.head()] + i &amp;lt; float((tot+i)*(25/100)))  )&lt;br /&gt;
	{&lt;br /&gt;
	q.dequeue();&lt;br /&gt;
	ok.signal();&lt;br /&gt;
	}&lt;br /&gt;
	i=1;&lt;br /&gt;
	}&lt;br /&gt;
	}&lt;br /&gt;
numcolor[color]++;&lt;br /&gt;
tot++;&lt;br /&gt;
}&lt;br /&gt;
procedure entry exit(color){&lt;br /&gt;
numcolor[color]--;&lt;br /&gt;
tot--;&lt;br /&gt;
if( numcolor[q.head()] + 1 &amp;gt;= float((tot+1)*(75/100))  ||&lt;br /&gt;
    numcolor[q.head()] + 1 &amp;lt; float((tot+1)*(25/100)) )&lt;br /&gt;
  	{&lt;br /&gt;
	q.dequeue();&lt;br /&gt;
	ok.signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Esercizio g.1==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Reference String&lt;br /&gt;
| 1 || 2 || 3 || 4 || 5 || 6 || 4 || 5 || 6 || 3 || 2 || 1 || 3 || 2 || 1 || 6 || 5 || 4 || 6 || 5 || 4 || 1 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
! Page Frame 1&lt;br /&gt;
| 1 || 1 || 1 || 4 || 4 || 4 ||   ||   ||   || 3 || 3 || 3 ||   ||   ||   || 6 || 6 || 6 ||   ||   ||   || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
! Page Frame 2&lt;br /&gt;
|   || 2 || 2 || 2 || 5 || 5 ||   ||   ||   || 5 || 2 || 2 ||   ||   ||   || 2 || 5 || 5 ||   ||   ||   || 5 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
! Page Frame 3&lt;br /&gt;
|   ||   || 3 || 3 || 3 || 6 ||   ||   ||   || 6 || 6 || 1 ||   ||   ||   || 1 || 1 || 4 ||   ||   ||   || 4 || 4 || 3&lt;br /&gt;
|}&lt;br /&gt;
                        &lt;br /&gt;
The above Reference String is both FIFO, LRU and MIN compliant.&lt;br /&gt;
&lt;br /&gt;
-TomOgn&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.05.24&amp;diff=509</id>
		<title>ProvaTeorica 2012.05.24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.05.24&amp;diff=509"/>
		<updated>2014-03-26T23:12:33Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2012-05-24.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor santuario&lt;br /&gt;
{&lt;br /&gt;
	Go = 0;               // andare al santuario&lt;br /&gt;
	Back = 1;             // tornare indietro&lt;br /&gt;
	condition ok[2];      // 2 condizioni&lt;br /&gt;
	crossing[2] = {0, 0}; // numero di persone sul ponte&lt;br /&gt;
	visiting = 0;         // numero di persone nel santuario&lt;br /&gt;
	waiting[2] = {0, 0};  // numero di persone in attesa&lt;br /&gt;
&lt;br /&gt;
	procedure entry entraponte(dir)&lt;br /&gt;
	{&lt;br /&gt;
		/* Mi blocco se: &lt;br /&gt;
		      - il numero di persone sul ponte ha raggiunto il massimo; oppure&lt;br /&gt;
		      - la direzione e' il santuario e il numero di visitatori &lt;br /&gt;
                        (compresi quelli che stanno raggiungendo il santuario) ha raggiunto il massimo; oppure&lt;br /&gt;
		      - qualcuno sta attraversando il ponte in direzione opposta; oppure&lt;br /&gt;
		      - qualcuno sta attendendo di attraversare nel senso opposto */	&lt;br /&gt;
		if (crossing[dir] == MAXPONTE || &lt;br /&gt;
		    (dir == Go &amp;amp;&amp;amp; visiting + crossing[dir] == MAXSANTUARIO) || &lt;br /&gt;
		    crossing[1 - dir] &amp;gt; 0 || &lt;br /&gt;
		    waiting[1 - dir] &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			waiting[dir]++;&lt;br /&gt;
			ok[dir].wait();&lt;br /&gt;
			waiting[dir]--;&lt;br /&gt;
		}&lt;br /&gt;
		crossing[dir]++;&lt;br /&gt;
&lt;br /&gt;
		if (dir == Back)&lt;br /&gt;
			visiting--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	procedure entry esciponte(dir)&lt;br /&gt;
	{&lt;br /&gt;
		crossing[dir]--;&lt;br /&gt;
&lt;br /&gt;
		if (dir == Go)&lt;br /&gt;
			visiting++;&lt;br /&gt;
		&lt;br /&gt;
		// [Case 1] Nessuno sta attraversando il ponte&lt;br /&gt;
		if (crossing[dir] == 0)&lt;br /&gt;
			ok[1 - dir].signal();&lt;br /&gt;
		// [Case 2] Qualcuno sta attraversando il ponte&lt;br /&gt;
		else&lt;br /&gt;
			ok[dir].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-TomOgn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor santuario{&lt;br /&gt;
	#define ANDATA 0&lt;br /&gt;
	#define RITORNO 1&lt;br /&gt;
	&lt;br /&gt;
	int waiting[2];&lt;br /&gt;
	int crossing[2];&lt;br /&gt;
	condition oktoenter[2];&lt;br /&gt;
	int count; /* persone dentro al santuario */&lt;br /&gt;
	&lt;br /&gt;
	procedure entry entraponte(int dir){&lt;br /&gt;
		if (dir == ANDATA){&lt;br /&gt;
			if (crossing[1-dir] &amp;gt; 0 || crossing[dir] &amp;gt;= MAXPONTE || cout+crossing[dir] &amp;gt;= MAXSANTUARIO){&lt;br /&gt;
				waiting[dir]++;&lt;br /&gt;
				oktoenter[dir].wait();&lt;br /&gt;
				waiting[dir]--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			if (crossing[1-dir] &amp;gt; 0 || crossing[dir] &amp;gt;= MAXPONTE){&lt;br /&gt;
				waiting[dir]++;&lt;br /&gt;
				oktoenter[dir].wait();&lt;br /&gt;
				waiting[dir]--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		crossing[dir]++;&lt;br /&gt;
		if ((crossing[dir]+count &amp;lt; MAXSANTUARIO) &amp;amp;&amp;amp; crossing[dir] &amp;lt; MAXPONTE)&lt;br /&gt;
			oktoenter[dir].signal();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry esciponte(int dir){&lt;br /&gt;
		crossing[dir]--;&lt;br /&gt;
		if (dir == ANDATA){&lt;br /&gt;
			count++;&lt;br /&gt;
			if (count+crossing[dir] &amp;lt; MAXSANTUARIO) /* voi che siete in attesa andate sul ponte */&lt;br /&gt;
				oktoenter[dir].signal();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			count--;&lt;br /&gt;
		&lt;br /&gt;
		if (crossing[dir] == 0)&lt;br /&gt;
			oktoenter[1-dir].signal();	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gabriele &amp;amp; Giulia (se non va colpa di Gabriele)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
monitor santuario{&lt;br /&gt;
	int CurrentDir /* 0 = arriving , 1 = leaving */&lt;br /&gt;
	int crossing&lt;br /&gt;
	condition oktoenter&lt;br /&gt;
	condition oktoleave&lt;br /&gt;
	//queue enter&lt;br /&gt;
	//queue ponte&lt;br /&gt;
	//queue leave&lt;br /&gt;
	int fidelis /* fedeli nel tempio */&lt;br /&gt;
&lt;br /&gt;
	procedure entry entraponte(CrossingDir){&lt;br /&gt;
		if(CrossingDir != CurrentDir){&lt;br /&gt;
			if(CrossingDir == 0){&lt;br /&gt;
				//enter.enqueue()&lt;br /&gt;
				oktoenter.wait()&lt;br /&gt;
				//enter.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			if(CrossingDir == 1){&lt;br /&gt;
				//leave.enqueue()&lt;br /&gt;
				oktoleave.wait()&lt;br /&gt;
				//leave.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if(CrossingDir == 0){&lt;br /&gt;
			if(fidelis == MAXSANTUARIO || crossing == MAXPONTE){&lt;br /&gt;
				//ponte.enqueue()&lt;br /&gt;
				oktoenter.wait()&lt;br /&gt;
				//ponte.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			fidelis++&lt;br /&gt;
			crossing++&lt;br /&gt;
		}&lt;br /&gt;
		if(CrossingDir == 1){&lt;br /&gt;
			if(crossing == MAXPONTE){&lt;br /&gt;
				//ponte.enqueue()&lt;br /&gt;
				oktoleave.wait()&lt;br /&gt;
				//ponte.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			fidelis--&lt;br /&gt;
			crossing++&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	precedure entry esciponte(CrossingDir){&lt;br /&gt;
		crossing--&lt;br /&gt;
		if(crossing == 0){&lt;br /&gt;
			if(CrossingDir == 0){&lt;br /&gt;
				if(fidelis &amp;lt; MAXSANTUARIO /*&amp;amp;&amp;amp; !enter.isempty()*/){&lt;br /&gt;
					oktoenter.signal()&lt;br /&gt;
				}&lt;br /&gt;
				else{&lt;br /&gt;
					CurrentDir = 1 - CurrentDir&lt;br /&gt;
					oktoleave.signal()&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else{&lt;br /&gt;
				CurrentDir = 1 - CurrentDir&lt;br /&gt;
				oktoenter.signal()&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	santuario{&lt;br /&gt;
		crossing = 0&lt;br /&gt;
		CurrentDir = 0&lt;br /&gt;
		fidelis = 0&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fede &amp;amp; Mirko&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor santuario {&lt;br /&gt;
condition okpassa; // vai sul ponte secondo metodo FIFO&lt;br /&gt;
int turn=2;        // turno di attraversamento&lt;br /&gt;
int visitatori[2];  // contatori andata ritorno&lt;br /&gt;
visitatori[0]=0;&lt;br /&gt;
visitatori[1]=0;&lt;br /&gt;
int fedeli=0;&lt;br /&gt;
int i=0;&lt;br /&gt;
Queue q;            // coda dei visitatori in attesa&lt;br /&gt;
&lt;br /&gt;
procedure entry entraponte(dir){&lt;br /&gt;
/* se il turno è della direzione opposta o&lt;br /&gt;
 i visitatori in transito sono MAXPONTE o&lt;br /&gt;
 la coda non è vuota aspetta */&lt;br /&gt;
	if( (dir==0 &amp;amp;&amp;amp; fedeli==MAXSANTUARIO ) || turn==(1-dir) || visitatori[dir]==MAXPONTE || !q.empty()){&lt;br /&gt;
		q.enqueue(dir);      // inserisci in coda&lt;br /&gt;
		okpassa.wait();      // aspetta&lt;br /&gt;
		if( q.head()==dir &amp;amp;&amp;amp; (visitatori[dir] + i) &amp;lt; (MAXPONTE - 1) ){  // questa condizione &lt;br /&gt;
                        i++;&lt;br /&gt;
			q.dequeue();		   // mi serve per far passare &lt;br /&gt;
			okpassa.signal();	   // MAXPONTE visitatori nella direzione&lt;br /&gt;
			}			// in attesa quando nella direzione opposta &lt;br /&gt;
		i=0;	         		// i visitatori in transito erano N           &lt;br /&gt;
		}&lt;br /&gt;
turn=dir;           // setto il turno della direzione&lt;br /&gt;
visitatori[dir]++;   //incremento visitatori in transito&lt;br /&gt;
if(dir==0){fedeli++;}&lt;br /&gt;
if(dir==1){fedeli--;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure entry esciponte(dir){&lt;br /&gt;
visitatore[dir]--;           //decremento visitatori in transito&lt;br /&gt;
/* se il primo visitatore in attesa va nella stessa direzione &lt;br /&gt;
di chi è uscito può entrare sul ponte poichè questo&lt;br /&gt;
si verifica solo se il visitatore uscito era il numero N &lt;br /&gt;
o il visitatore che esce è l'ultimo fa passare il primo in attesa&lt;br /&gt;
che sarà sicuramente della direzione opposta */      &lt;br /&gt;
 primo = (dir == 0 &amp;amp;&amp;amp; fedeli &amp;lt; MAXSANTUARIO) &amp;amp;&amp;amp; ( q.head()==0 || visitatori[0]==0 ))&lt;br /&gt;
 secondo = (dir == 1 &amp;amp;&amp;amp; (q.head()==0 || visitatori[1]==0 )	&lt;br /&gt;
&lt;br /&gt;
	      if(primo || secondo){                                               &lt;br /&gt;
              if(visitatore[dir]==0){&lt;br /&gt;
                turn=2;   // ponte vuoto&lt;br /&gt;
                }&lt;br /&gt;
		q.dequeue();&lt;br /&gt;
		okpassa.signal();    // causa il passaggio sul ponte &lt;br /&gt;
                     //  del primo visitatore in attesa&lt;br /&gt;
		     //	(secondo una politica FIFO)&lt;br /&gt;
		}&lt;br /&gt;
		      &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#define ANDARA 0;&lt;br /&gt;
#define RITORNO 1;&lt;br /&gt;
monitor santuario{&lt;br /&gt;
	int cross;	&lt;br /&gt;
	condition oktocross[2];	&lt;br /&gt;
	int fidelis;&lt;br /&gt;
	entraponte(dir){&lt;br /&gt;
		if( cross != 0 || (dir == 0 &amp;amp;&amp;amp; MAXSANTUARIO == fidelis)){&lt;br /&gt;
			wait[dir]++;&lt;br /&gt;
			oktocross[dir].wait();&lt;br /&gt;
			wait[dir]--;&lt;br /&gt;
		}&lt;br /&gt;
		cross++;	&lt;br /&gt;
		if(dir == 0){&lt;br /&gt;
			fidelis++;&lt;br /&gt;
			if(cross &amp;lt; MAXPONTE &amp;amp;&amp;amp; MAXSANTUARIO &amp;gt; fidelis){&lt;br /&gt;
				oktocross[dir].signal;&lt;br /&gt;
			}	&lt;br /&gt;
		}else{&lt;br /&gt;
			fidelis--;&lt;br /&gt;
			if(cross &amp;lt; MAXPONTE){&lt;br /&gt;
				oktocross[dir].signal;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	esciponte(dir){&lt;br /&gt;
		cross--;&lt;br /&gt;
		if(cross == 0 &amp;amp;&amp;amp; MAXSANTUARIO == fidelis){&lt;br /&gt;
			oktocross[RITORNO].signal();&lt;br /&gt;
		}else if(cross == 0 &amp;amp;&amp;amp; wait[1-dir]){&lt;br /&gt;
			oktocross[1-dir].signal();&lt;br /&gt;
		}else if(cross == 0){&lt;br /&gt;
			oktocross[dir].signal();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-Midolo&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.05.24&amp;diff=505</id>
		<title>ProvaTeorica 2012.05.24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.05.24&amp;diff=505"/>
		<updated>2014-03-26T10:32:26Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2012-05-24.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor santuario&lt;br /&gt;
{&lt;br /&gt;
	Go = 0;               // andare al santuario&lt;br /&gt;
	Back = 1;             // tornare indietro&lt;br /&gt;
	condition ok[2];      // 2 condizioni&lt;br /&gt;
	crossing[2] = {0, 0}; // numero di persone sul ponte&lt;br /&gt;
	visiting = 0;         // numero di persone nel santuario&lt;br /&gt;
	waiting[2] = {0, 0};  // numero di persone in attesa&lt;br /&gt;
&lt;br /&gt;
	procedure entry entraponte(dir)&lt;br /&gt;
	{&lt;br /&gt;
		/* Mi blocco se: &lt;br /&gt;
		      - il numero di persone sul ponte ha raggiunto il massimo; oppure&lt;br /&gt;
		      - la direzione e' il santuario e il numero di visitatori &lt;br /&gt;
                        (compresi quelli che stanno raggiungendo il santuario) ha raggiunto il massimo; oppure&lt;br /&gt;
		      - qualcuno sta attraversando il ponte in direzione opposta; oppure&lt;br /&gt;
		      - qualcuno sta attendendo di attraversare nel senso opposto */	&lt;br /&gt;
		if (crossing[dir] == MAXPONTE || &lt;br /&gt;
		    (dir == Go &amp;amp;&amp;amp; visiting + crossing[dir] == MAXSANTUARIO) || &lt;br /&gt;
		    crossing[1 - dir] &amp;gt; 0 || &lt;br /&gt;
		    waiting[1 - dir] &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			waiting[dir]++;&lt;br /&gt;
			ok[dir].wait();&lt;br /&gt;
			waiting[dir]--;&lt;br /&gt;
		}&lt;br /&gt;
		crossing[dir]++;&lt;br /&gt;
&lt;br /&gt;
		if (dir == Back)&lt;br /&gt;
			visiting--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	procedure entry esciponte(dir)&lt;br /&gt;
	{&lt;br /&gt;
		crossing[dir]--;&lt;br /&gt;
&lt;br /&gt;
		if (dir == Go)&lt;br /&gt;
			visiting++;&lt;br /&gt;
		&lt;br /&gt;
		// [Case 1] Nessuno sta attraversando il ponte&lt;br /&gt;
		if (crossing[dir] == 0)&lt;br /&gt;
			ok[1 - dir].signal();&lt;br /&gt;
		// [Case 2] Qualcuno sta attraversando il ponte&lt;br /&gt;
		else&lt;br /&gt;
			ok[dir].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-TomOgn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor santuario{&lt;br /&gt;
	#define ANDATA 0&lt;br /&gt;
	#define RITORNO 1&lt;br /&gt;
	&lt;br /&gt;
	int waiting[2];&lt;br /&gt;
	int crossing[2];&lt;br /&gt;
	condition oktoenter[2];&lt;br /&gt;
	int count; /* persone dentro al santuario */&lt;br /&gt;
	&lt;br /&gt;
	procedure entry entraponte(int dir){&lt;br /&gt;
		if (dir == ANDATA){&lt;br /&gt;
			if (crossing[1-dir] &amp;gt; 0 || crossing[dir] &amp;gt;= MAXPONTE || cout+crossing[dir] &amp;gt;= MAXSANTUARIO){&lt;br /&gt;
				waiting[dir]++;&lt;br /&gt;
				oktoenter[dir].wait();&lt;br /&gt;
				waiting[dir]--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			if (crossing[1-dir] &amp;gt; 0 || crossing[dir] &amp;gt;= MAXPONTE){&lt;br /&gt;
				waiting[dir]++;&lt;br /&gt;
				oktoenter[dir].wait();&lt;br /&gt;
				waiting[dir]--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		crossing[dir]++;&lt;br /&gt;
		if ((crossing[dir]+count &amp;lt; MAXSANTUARIO) &amp;amp;&amp;amp; crossing[dir] &amp;lt; MAXPONTE)&lt;br /&gt;
			oktoenter[dir].signal();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry esciponte(int dir){&lt;br /&gt;
		crossing[dir]--;&lt;br /&gt;
		if (dir == ANDATA){&lt;br /&gt;
			count++;&lt;br /&gt;
			if (count+crossing[dir] &amp;lt; MAXSANTUARIO) /* voi che siete in attesa andate sul ponte */&lt;br /&gt;
				oktoenter[dir].signal();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			count--;&lt;br /&gt;
		&lt;br /&gt;
		if (crossing[dir] == 0)&lt;br /&gt;
			oktoenter[1-dir].signal();	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gabriele &amp;amp; Giulia (se non va colpa di Gabriele)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
monitor santuario{&lt;br /&gt;
	int CurrentDir /* 0 = arriving , 1 = leaving */&lt;br /&gt;
	int crossing&lt;br /&gt;
	condition oktoenter&lt;br /&gt;
	condition oktoleave&lt;br /&gt;
	//queue enter&lt;br /&gt;
	//queue ponte&lt;br /&gt;
	//queue leave&lt;br /&gt;
	int fidelis /* fedeli nel tempio */&lt;br /&gt;
&lt;br /&gt;
	procedure entry entraponte(CrossingDir){&lt;br /&gt;
		if(CrossingDir != CurrentDir){&lt;br /&gt;
			if(CrossingDir == 0){&lt;br /&gt;
				//enter.enqueue()&lt;br /&gt;
				oktoenter.wait()&lt;br /&gt;
				//enter.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			if(CrossingDir == 1){&lt;br /&gt;
				//leave.enqueue()&lt;br /&gt;
				oktoleave.wait()&lt;br /&gt;
				//leave.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if(CrossingDir == 0){&lt;br /&gt;
			if(fidelis == MAXSANTUARIO || crossing == MAXPONTE){&lt;br /&gt;
				//ponte.enqueue()&lt;br /&gt;
				oktoenter.wait()&lt;br /&gt;
				//ponte.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			fidelis++&lt;br /&gt;
			crossing++&lt;br /&gt;
		}&lt;br /&gt;
		if(CrossingDir == 1){&lt;br /&gt;
			if(crossing == MAXPONTE){&lt;br /&gt;
				//ponte.enqueue()&lt;br /&gt;
				oktoleave.wait()&lt;br /&gt;
				//ponte.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			fidelis--&lt;br /&gt;
			crossing++&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	precedure entry esciponte(CrossingDir){&lt;br /&gt;
		crossing--&lt;br /&gt;
		if(crossing == 0){&lt;br /&gt;
			if(CrossingDir == 0){&lt;br /&gt;
				if(fidelis &amp;lt; MAXSANTUARIO /*&amp;amp;&amp;amp; !enter.isempty()*/){&lt;br /&gt;
					oktoenter.signal()&lt;br /&gt;
				}&lt;br /&gt;
				else{&lt;br /&gt;
					CurrentDir = 1 - CurrentDir&lt;br /&gt;
					oktoleave.signal()&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else{&lt;br /&gt;
				CurrentDir = 1 - CurrentDir&lt;br /&gt;
				oktoenter.signal()&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	santuario{&lt;br /&gt;
		crossing = 0&lt;br /&gt;
		CurrentDir = 0&lt;br /&gt;
		fidelis = 0&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fede &amp;amp; Mirko&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#DEFINE MAXSANTUARIO N&lt;br /&gt;
&lt;br /&gt;
monitor santuario {&lt;br /&gt;
condition okpassa; // vai sul ponte secondo metodo FIFO&lt;br /&gt;
int turn=2;        // turno di attraversamento&lt;br /&gt;
int visitatori[2];  // contatori andata ritorno&lt;br /&gt;
visitatori[0]=0;&lt;br /&gt;
visitatori[1]=0;&lt;br /&gt;
int i=0;&lt;br /&gt;
Queue q;            // coda dei visitatori in attesa&lt;br /&gt;
&lt;br /&gt;
procedure entry entraponte(dir){&lt;br /&gt;
/* se il turno è della direzione opposta o&lt;br /&gt;
 i visitatori in transito sono N o&lt;br /&gt;
 la coda non è vuota aspetta */&lt;br /&gt;
	if(turn==(1-dir) || visitatori[dir]==N || !q.empty()){&lt;br /&gt;
		q.enqueue(dir);      // inserisci in coda&lt;br /&gt;
		okpassa.wait();      // aspetta&lt;br /&gt;
		if( q.head()==dir &amp;amp;&amp;amp; (visitatori[dir] + i) &amp;lt; (N - 1) ){  // questa condizione &lt;br /&gt;
                        i++;&lt;br /&gt;
			q.dequeue();		   // mi serve per far passare &lt;br /&gt;
			okpassa.signal();	   // N visitatori nella direzione&lt;br /&gt;
			}			// in attesa quando nella direzione opposta &lt;br /&gt;
		i=0;	         		// i visitatori in transito erano N           &lt;br /&gt;
		}&lt;br /&gt;
turn=dir;           // setto il turno della direzione&lt;br /&gt;
visitatori[dir]++;   //incremento visitatori in transito&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure entry esciponte(dir){&lt;br /&gt;
visitatore[dir]--;           //decremento visitatori in transito&lt;br /&gt;
/* se il primo visitatore in attesa va nella stessa direzione &lt;br /&gt;
di chi è uscito può entrare sul ponte poichè questo&lt;br /&gt;
si verifica solo se il visitatore uscito era il numero N &lt;br /&gt;
o il visitatore che esce è l'ultimo fa passare il primo in attesa&lt;br /&gt;
che sarà sicuramente della direzione opposta */      &lt;br /&gt;
                 &lt;br /&gt;
	if (q.head()==dir || visitatori[dir]==0){&lt;br /&gt;
              if(visitatore[dir]==0){&lt;br /&gt;
                turn=2;   // ponte vuoto&lt;br /&gt;
                }&lt;br /&gt;
		q.dequeue();&lt;br /&gt;
		okpassa.signal();    // causa il passaggio sul ponte &lt;br /&gt;
                     //  del primo visitatore in attesa&lt;br /&gt;
		     //	(secondo una politica FIFO)&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.05.24&amp;diff=504</id>
		<title>ProvaTeorica 2012.05.24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.05.24&amp;diff=504"/>
		<updated>2014-03-26T09:51:47Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2012-05-24.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor santuario&lt;br /&gt;
{&lt;br /&gt;
	Go = 0;               // andare al santuario&lt;br /&gt;
	Back = 1;             // tornare indietro&lt;br /&gt;
	condition ok[2];      // 2 condizioni&lt;br /&gt;
	crossing[2] = {0, 0}; // numero di persone sul ponte&lt;br /&gt;
	visiting = 0;         // numero di persone nel santuario&lt;br /&gt;
	waiting[2] = {0, 0};  // numero di persone in attesa&lt;br /&gt;
&lt;br /&gt;
	procedure entry entraponte(dir)&lt;br /&gt;
	{&lt;br /&gt;
		/* Mi blocco se: &lt;br /&gt;
		      - il numero di persone sul ponte ha raggiunto il massimo; oppure&lt;br /&gt;
		      - la direzione e' il santuario e il numero di visitatori &lt;br /&gt;
                        (compresi quelli che stanno raggiungendo il santuario) ha raggiunto il massimo; oppure&lt;br /&gt;
		      - qualcuno sta attraversando il ponte in direzione opposta; oppure&lt;br /&gt;
		      - qualcuno sta attendendo di attraversare nel senso opposto */	&lt;br /&gt;
		if (crossing[dir] == MAXPONTE || &lt;br /&gt;
		    (dir == Go &amp;amp;&amp;amp; visiting + crossing[dir] == MAXSANTUARIO) || &lt;br /&gt;
		    crossing[1 - dir] &amp;gt; 0 || &lt;br /&gt;
		    waiting[1 - dir] &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			waiting[dir]++;&lt;br /&gt;
			ok[dir].wait();&lt;br /&gt;
			waiting[dir]--;&lt;br /&gt;
		}&lt;br /&gt;
		crossing[dir]++;&lt;br /&gt;
&lt;br /&gt;
		if (dir == Back)&lt;br /&gt;
			visiting--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	procedure entry esciponte(dir)&lt;br /&gt;
	{&lt;br /&gt;
		crossing[dir]--;&lt;br /&gt;
&lt;br /&gt;
		if (dir == Go)&lt;br /&gt;
			visiting++;&lt;br /&gt;
		&lt;br /&gt;
		// [Case 1] Nessuno sta attraversando il ponte&lt;br /&gt;
		if (crossing[dir] == 0)&lt;br /&gt;
			ok[1 - dir].signal();&lt;br /&gt;
		// [Case 2] Qualcuno sta attraversando il ponte&lt;br /&gt;
		else&lt;br /&gt;
			ok[dir].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-TomOgn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor santuario{&lt;br /&gt;
	#define ANDATA 0&lt;br /&gt;
	#define RITORNO 1&lt;br /&gt;
	&lt;br /&gt;
	int waiting[2];&lt;br /&gt;
	int crossing[2];&lt;br /&gt;
	condition oktoenter[2];&lt;br /&gt;
	int count; /* persone dentro al santuario */&lt;br /&gt;
	&lt;br /&gt;
	procedure entry entraponte(int dir){&lt;br /&gt;
		if (dir == ANDATA){&lt;br /&gt;
			if (crossing[1-dir] &amp;gt; 0 || crossing[dir] &amp;gt;= MAXPONTE || cout+crossing[dir] &amp;gt;= MAXSANTUARIO){&lt;br /&gt;
				waiting[dir]++;&lt;br /&gt;
				oktoenter[dir].wait();&lt;br /&gt;
				waiting[dir]--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			if (crossing[1-dir] &amp;gt; 0 || crossing[dir] &amp;gt;= MAXPONTE){&lt;br /&gt;
				waiting[dir]++;&lt;br /&gt;
				oktoenter[dir].wait();&lt;br /&gt;
				waiting[dir]--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		crossing[dir]++;&lt;br /&gt;
		if ((crossing[dir]+count &amp;lt; MAXSANTUARIO) &amp;amp;&amp;amp; crossing[dir] &amp;lt; MAXPONTE)&lt;br /&gt;
			oktoenter[dir].signal();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry esciponte(int dir){&lt;br /&gt;
		crossing[dir]--;&lt;br /&gt;
		if (dir == ANDATA){&lt;br /&gt;
			count++;&lt;br /&gt;
			if (count+crossing[dir] &amp;lt; MAXSANTUARIO) /* voi che siete in attesa andate sul ponte */&lt;br /&gt;
				oktoenter[dir].signal();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			count--;&lt;br /&gt;
		&lt;br /&gt;
		if (crossing[dir] == 0)&lt;br /&gt;
			oktoenter[1-dir].signal();	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gabriele &amp;amp; Giulia (se non va colpa di Gabriele)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
monitor santuario{&lt;br /&gt;
	int CurrentDir /* 0 = arriving , 1 = leaving */&lt;br /&gt;
	int crossing&lt;br /&gt;
	condition oktoenter&lt;br /&gt;
	condition oktoleave&lt;br /&gt;
	//queue enter&lt;br /&gt;
	//queue ponte&lt;br /&gt;
	//queue leave&lt;br /&gt;
	int fidelis /* fedeli nel tempio */&lt;br /&gt;
&lt;br /&gt;
	procedure entry entraponte(CrossingDir){&lt;br /&gt;
		if(CrossingDir != CurrentDir){&lt;br /&gt;
			if(CrossingDir == 0){&lt;br /&gt;
				//enter.enqueue()&lt;br /&gt;
				oktoenter.wait()&lt;br /&gt;
				//enter.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			if(CrossingDir == 1){&lt;br /&gt;
				//leave.enqueue()&lt;br /&gt;
				oktoleave.wait()&lt;br /&gt;
				//leave.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if(CrossingDir == 0){&lt;br /&gt;
			if(fidelis == MAXSANTUARIO || crossing == MAXPONTE){&lt;br /&gt;
				//ponte.enqueue()&lt;br /&gt;
				oktoenter.wait()&lt;br /&gt;
				//ponte.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			fidelis++&lt;br /&gt;
			crossing++&lt;br /&gt;
		}&lt;br /&gt;
		if(CrossingDir == 1){&lt;br /&gt;
			if(crossing == MAXPONTE){&lt;br /&gt;
				//ponte.enqueue()&lt;br /&gt;
				oktoleave.wait()&lt;br /&gt;
				//ponte.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			fidelis--&lt;br /&gt;
			crossing++&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	precedure entry esciponte(CrossingDir){&lt;br /&gt;
		crossing--&lt;br /&gt;
		if(crossing == 0){&lt;br /&gt;
			if(CrossingDir == 0){&lt;br /&gt;
				if(fidelis &amp;lt; MAXSANTUARIO /*&amp;amp;&amp;amp; !enter.isempty()*/){&lt;br /&gt;
					oktoenter.signal()&lt;br /&gt;
				}&lt;br /&gt;
				else{&lt;br /&gt;
					CurrentDir = 1 - CurrentDir&lt;br /&gt;
					oktoleave.signal()&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else{&lt;br /&gt;
				CurrentDir = 1 - CurrentDir&lt;br /&gt;
				oktoenter.signal()&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	santuario{&lt;br /&gt;
		crossing = 0&lt;br /&gt;
		CurrentDir = 0&lt;br /&gt;
		fidelis = 0&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fede &amp;amp; Mirko&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#DEFINE MAXSANTUARIO N&lt;br /&gt;
&lt;br /&gt;
monitor santuario {&lt;br /&gt;
condition okpassa; // vai sul ponte secondo metodo FIFO&lt;br /&gt;
int turn=2;        // turno di attraversamento&lt;br /&gt;
int visitatori[2];  // contatori andata ritorno&lt;br /&gt;
visitatori[0]=0;&lt;br /&gt;
visitatori[1]=0;&lt;br /&gt;
Queue q;            // coda dei visitatori in attesa&lt;br /&gt;
&lt;br /&gt;
procedure entry entraponte(dir){&lt;br /&gt;
/* se il turno è della direzione opposta o&lt;br /&gt;
 i visitatori in transito sono N o&lt;br /&gt;
 la coda non è vuota aspetta */&lt;br /&gt;
	if(turn==(1-dir) || visitatori[dir]==N || !q.empty()){&lt;br /&gt;
		q.enqueue(dir);      // inserisci in coda&lt;br /&gt;
		okpassa.wait();      // aspetta&lt;br /&gt;
		if( q.head()==dir &amp;amp;&amp;amp; visitatori[dir]&amp;lt;N ){  // questa condizione &lt;br /&gt;
			q.dequeue();		   // mi serve per far passare &lt;br /&gt;
			okpassa.signal();	   // N visitatori nella direzione&lt;br /&gt;
			}			// in attesa quando nella direzione opposta &lt;br /&gt;
			         		// i visitatori in transito erano N           &lt;br /&gt;
			}&lt;br /&gt;
turn=dir;           // setto il turno della direzione&lt;br /&gt;
visitatori[dir]++;   //incremento visitatori in transito&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure entry esciponte(dir){&lt;br /&gt;
visitatore[dir]--;           //decremento visitatori in transito&lt;br /&gt;
/* se il primo visitatore in attesa va nella stessa direzione &lt;br /&gt;
di chi è uscito può entrare sul ponte poichè questo&lt;br /&gt;
si verifica solo se il visitatore uscito era il numero N &lt;br /&gt;
o il visitatore che esce è l'ultimo fa passare il primo in attesa&lt;br /&gt;
che sarà sicuramente della direzione opposta &lt;br /&gt;
*/&lt;br /&gt;
	if (q.head()==dir || visitatore[dir]==0){&lt;br /&gt;
		q.dequeue();&lt;br /&gt;
		okpassa.signal();    // causa il passaggio sul ponte &lt;br /&gt;
                     //  del primo visitatore in attesa&lt;br /&gt;
		     //	(secondo una politica FIFO)&lt;br /&gt;
		}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Alessandro&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.05.24&amp;diff=503</id>
		<title>ProvaTeorica 2012.05.24</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.05.24&amp;diff=503"/>
		<updated>2014-03-26T09:47:13Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;http://www.cs.unibo.it/~renzo/so/compiti/2012-05-24.tot.pdf&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor santuario&lt;br /&gt;
{&lt;br /&gt;
	Go = 0;               // andare al santuario&lt;br /&gt;
	Back = 1;             // tornare indietro&lt;br /&gt;
	condition ok[2];      // 2 condizioni&lt;br /&gt;
	crossing[2] = {0, 0}; // numero di persone sul ponte&lt;br /&gt;
	visiting = 0;         // numero di persone nel santuario&lt;br /&gt;
	waiting[2] = {0, 0};  // numero di persone in attesa&lt;br /&gt;
&lt;br /&gt;
	procedure entry entraponte(dir)&lt;br /&gt;
	{&lt;br /&gt;
		/* Mi blocco se: &lt;br /&gt;
		      - il numero di persone sul ponte ha raggiunto il massimo; oppure&lt;br /&gt;
		      - la direzione e' il santuario e il numero di visitatori &lt;br /&gt;
                        (compresi quelli che stanno raggiungendo il santuario) ha raggiunto il massimo; oppure&lt;br /&gt;
		      - qualcuno sta attraversando il ponte in direzione opposta; oppure&lt;br /&gt;
		      - qualcuno sta attendendo di attraversare nel senso opposto */	&lt;br /&gt;
		if (crossing[dir] == MAXPONTE || &lt;br /&gt;
		    (dir == Go &amp;amp;&amp;amp; visiting + crossing[dir] == MAXSANTUARIO) || &lt;br /&gt;
		    crossing[1 - dir] &amp;gt; 0 || &lt;br /&gt;
		    waiting[1 - dir] &amp;gt; 0)&lt;br /&gt;
		{&lt;br /&gt;
			waiting[dir]++;&lt;br /&gt;
			ok[dir].wait();&lt;br /&gt;
			waiting[dir]--;&lt;br /&gt;
		}&lt;br /&gt;
		crossing[dir]++;&lt;br /&gt;
&lt;br /&gt;
		if (dir == Back)&lt;br /&gt;
			visiting--;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	procedure entry esciponte(dir)&lt;br /&gt;
	{&lt;br /&gt;
		crossing[dir]--;&lt;br /&gt;
&lt;br /&gt;
		if (dir == Go)&lt;br /&gt;
			visiting++;&lt;br /&gt;
		&lt;br /&gt;
		// [Case 1] Nessuno sta attraversando il ponte&lt;br /&gt;
		if (crossing[dir] == 0)&lt;br /&gt;
			ok[1 - dir].signal();&lt;br /&gt;
		// [Case 2] Qualcuno sta attraversando il ponte&lt;br /&gt;
		else&lt;br /&gt;
			ok[dir].signal();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-TomOgn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
monitor santuario{&lt;br /&gt;
	#define ANDATA 0&lt;br /&gt;
	#define RITORNO 1&lt;br /&gt;
	&lt;br /&gt;
	int waiting[2];&lt;br /&gt;
	int crossing[2];&lt;br /&gt;
	condition oktoenter[2];&lt;br /&gt;
	int count; /* persone dentro al santuario */&lt;br /&gt;
	&lt;br /&gt;
	procedure entry entraponte(int dir){&lt;br /&gt;
		if (dir == ANDATA){&lt;br /&gt;
			if (crossing[1-dir] &amp;gt; 0 || crossing[dir] &amp;gt;= MAXPONTE || cout+crossing[dir] &amp;gt;= MAXSANTUARIO){&lt;br /&gt;
				waiting[dir]++;&lt;br /&gt;
				oktoenter[dir].wait();&lt;br /&gt;
				waiting[dir]--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			if (crossing[1-dir] &amp;gt; 0 || crossing[dir] &amp;gt;= MAXPONTE){&lt;br /&gt;
				waiting[dir]++;&lt;br /&gt;
				oktoenter[dir].wait();&lt;br /&gt;
				waiting[dir]--;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		crossing[dir]++;&lt;br /&gt;
		if ((crossing[dir]+count &amp;lt; MAXSANTUARIO) &amp;amp;&amp;amp; crossing[dir] &amp;lt; MAXPONTE)&lt;br /&gt;
			oktoenter[dir].signal();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	procedure entry esciponte(int dir){&lt;br /&gt;
		crossing[dir]--;&lt;br /&gt;
		if (dir == ANDATA){&lt;br /&gt;
			count++;&lt;br /&gt;
			if (count+crossing[dir] &amp;lt; MAXSANTUARIO) /* voi che siete in attesa andate sul ponte */&lt;br /&gt;
				oktoenter[dir].signal();&lt;br /&gt;
		}&lt;br /&gt;
		else&lt;br /&gt;
			count--;&lt;br /&gt;
		&lt;br /&gt;
		if (crossing[dir] == 0)&lt;br /&gt;
			oktoenter[1-dir].signal();	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Gabriele &amp;amp; Giulia (se non va colpa di Gabriele)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
monitor santuario{&lt;br /&gt;
	int CurrentDir /* 0 = arriving , 1 = leaving */&lt;br /&gt;
	int crossing&lt;br /&gt;
	condition oktoenter&lt;br /&gt;
	condition oktoleave&lt;br /&gt;
	//queue enter&lt;br /&gt;
	//queue ponte&lt;br /&gt;
	//queue leave&lt;br /&gt;
	int fidelis /* fedeli nel tempio */&lt;br /&gt;
&lt;br /&gt;
	procedure entry entraponte(CrossingDir){&lt;br /&gt;
		if(CrossingDir != CurrentDir){&lt;br /&gt;
			if(CrossingDir == 0){&lt;br /&gt;
				//enter.enqueue()&lt;br /&gt;
				oktoenter.wait()&lt;br /&gt;
				//enter.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			if(CrossingDir == 1){&lt;br /&gt;
				//leave.enqueue()&lt;br /&gt;
				oktoleave.wait()&lt;br /&gt;
				//leave.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		if(CrossingDir == 0){&lt;br /&gt;
			if(fidelis == MAXSANTUARIO || crossing == MAXPONTE){&lt;br /&gt;
				//ponte.enqueue()&lt;br /&gt;
				oktoenter.wait()&lt;br /&gt;
				//ponte.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			fidelis++&lt;br /&gt;
			crossing++&lt;br /&gt;
		}&lt;br /&gt;
		if(CrossingDir == 1){&lt;br /&gt;
			if(crossing == MAXPONTE){&lt;br /&gt;
				//ponte.enqueue()&lt;br /&gt;
				oktoleave.wait()&lt;br /&gt;
				//ponte.dequeue()&lt;br /&gt;
			}&lt;br /&gt;
			fidelis--&lt;br /&gt;
			crossing++&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	precedure entry esciponte(CrossingDir){&lt;br /&gt;
		crossing--&lt;br /&gt;
		if(crossing == 0){&lt;br /&gt;
			if(CrossingDir == 0){&lt;br /&gt;
				if(fidelis &amp;lt; MAXSANTUARIO /*&amp;amp;&amp;amp; !enter.isempty()*/){&lt;br /&gt;
					oktoenter.signal()&lt;br /&gt;
				}&lt;br /&gt;
				else{&lt;br /&gt;
					CurrentDir = 1 - CurrentDir&lt;br /&gt;
					oktoleave.signal()&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else{&lt;br /&gt;
				CurrentDir = 1 - CurrentDir&lt;br /&gt;
				oktoenter.signal()&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	santuario{&lt;br /&gt;
		crossing = 0&lt;br /&gt;
		CurrentDir = 0&lt;br /&gt;
		fidelis = 0&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Fede &amp;amp; Mirko&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#DEFINE MAXSANTUARIO N&lt;br /&gt;
&lt;br /&gt;
monitor santuario {&lt;br /&gt;
condition okpassa; // vai sul ponte secondo metodo FIFO&lt;br /&gt;
int turn=2;        // turno di attraversamento&lt;br /&gt;
int visitatori[2];  // contatori andata ritorno&lt;br /&gt;
visitatori[0]=0;&lt;br /&gt;
visitatori[1]=0;&lt;br /&gt;
Queue q;            // coda dei visitatori in attesa&lt;br /&gt;
&lt;br /&gt;
procedure entry entraponte(dir){&lt;br /&gt;
/* se il turno è della direzione opposta o&lt;br /&gt;
 i visitatori in transito sono N o&lt;br /&gt;
 la coda non è vuota aspetta */&lt;br /&gt;
	if(turn==(1-dir) || visitatori[dir]==N || !q.empty()){&lt;br /&gt;
		q.enqueue(dir);      // inserisci in coda&lt;br /&gt;
		okpassa.wait();      // aspetta&lt;br /&gt;
		if( q.head()==dir &amp;amp;&amp;amp; visitatori[dir]&amp;lt;N ){  // questa condizione &lt;br /&gt;
			q.dequeue();		   // mi serve per far passare &lt;br /&gt;
			okpassa.signal();	   // N visitatori nella direzione&lt;br /&gt;
			}			// in attesa quando nella direzione opposta &lt;br /&gt;
			         		// i visitatori in transito erano N           &lt;br /&gt;
			}&lt;br /&gt;
turn=dir;           // setto il turno della direzione&lt;br /&gt;
visitatori[dir]++;   //incremento visitatori in transito&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
procedure entry esciponte(dir){&lt;br /&gt;
visitatore[dir]--;           //decremento visitatori in transito&lt;br /&gt;
/* se il primo visitatore in attesa va nella stessa direzione &lt;br /&gt;
di chi è uscito può entrare sul ponte poichè questo&lt;br /&gt;
si verifica solo se il visitatore uscito era il numero N &lt;br /&gt;
o il visitatore che esce è l'ultimo fa passare il primo in attesa&lt;br /&gt;
che sarà sicuramente della direzione opposta &lt;br /&gt;
*/&lt;br /&gt;
	if (q.head()==dir || visitatore[dir]==0){&lt;br /&gt;
		q.dequeue();&lt;br /&gt;
		okpassa.signal();    // causa il passaggio sul ponte &lt;br /&gt;
                     //  del primo visitatore in attesa&lt;br /&gt;
		     //	(secondo una politica FIFO)&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=472</id>
		<title>ProvaTeorica 2014.01.22</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=472"/>
		<updated>2014-03-19T08:13:59Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
URL: http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
&lt;br /&gt;
@author: Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/* auto attraversa il ponte */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=enqueue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		        q=enqueue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=head(q);                          /* leggo la prossima auto che aspetta di entrare */&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)     /*nessuna auto in transito nel ponte o il prossimo va nella stessa direzione*/&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
                }&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
	ovest--;&lt;br /&gt;
	r=head(q);                          /* leggo la prossima auto che aspetta di entrare */&lt;br /&gt;
		if(ovest == 0 || r == &amp;quot;O&amp;quot;)	 /*nessuna auto in transito nel ponte o il prossimo va nella stessa direzione*/&lt;br /&gt;
		{&lt;br /&gt;
		turn = 0;	/*avanti un altro */&lt;br /&gt;
		}&lt;br /&gt;
		if(!empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q.dequeue();		&lt;br /&gt;
		oktomove.signal();	/*segnale*/&lt;br /&gt;
	        }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * URL: http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
 * author: Tommaso Ognibene&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
monitor bridge&lt;br /&gt;
{&lt;br /&gt;
	condition okE;    // attraversare in direzione Est&lt;br /&gt;
	condition okW;    // attraversare in direzione Ovest&lt;br /&gt;
	int n = 0;        // numero di veicoli sul ponte&lt;br /&gt;
	int waitingE = 0; // numero di veicoli che attendono di attraversare in direzione Est&lt;br /&gt;
	int waitingW = 0; // numero di veicoli che attendono di attraversare in direzione Ovest&lt;br /&gt;
	bool toE = true;  // direzione di attraversamento&lt;br /&gt;
&lt;br /&gt;
	procedure entry enter(Vehicle vehicle)&lt;br /&gt;
	{&lt;br /&gt;
		// [Case 1] Il veicolo vuole attraversare in direzione Ovest&lt;br /&gt;
		if (vehicle.To == 'W')&lt;br /&gt;
		{&lt;br /&gt;
			/* Se - il numero di veicoli sul ponte ha raggiunto il massimo; oppure&lt;br /&gt;
			      - qualcuno sta attraversando in direzione opposta; oppure&lt;br /&gt;
			      - qualcuno sta attendendo di attraversare in direzione opposta */&lt;br /&gt;
			if (n == N || (toE &amp;amp;&amp;amp; n &amp;gt; 0) || (!toE &amp;amp;&amp;amp; waitingE &amp;gt; 0))&lt;br /&gt;
			{&lt;br /&gt;
				// Mi fermo e attendo di essere sbloccato&lt;br /&gt;
				waitingW++;&lt;br /&gt;
				okW.wait();&lt;br /&gt;
				waitingW--;&lt;br /&gt;
			}&lt;br /&gt;
			toE = false;&lt;br /&gt;
			n++;&lt;br /&gt;
			&lt;br /&gt;
			/* Se possibile, sblocco eventuali altri veicoli in attesa per la stessa direzione.&lt;br /&gt;
			 * Questo non crea starvation in quanto sono sicuramente un numero limitato. */&lt;br /&gt;
			if (n &amp;lt; N &amp;amp;&amp;amp; waitingE == 0)&lt;br /&gt;
				okW.signal();&lt;br /&gt;
		}&lt;br /&gt;
		// [Case 2] Il veicolo vuole attraversare in direzione Est&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			/* Se - il numero di veicoli sul ponte ha raggiunto il massimo; oppure&lt;br /&gt;
			      - qualcuno sta attraversando in direzione opposta; oppure&lt;br /&gt;
			      - qualcuno sta attendendo di attraversare in direzione opposta */&lt;br /&gt;
			if (n == N || (!toE &amp;amp;&amp;amp; n &amp;gt; 0) || (toE &amp;amp;&amp;amp; waitingW &amp;gt; 0))&lt;br /&gt;
			{&lt;br /&gt;
			        // Mi fermo e attendo di essere sbloccato&lt;br /&gt;
				waitingE++;&lt;br /&gt;
				okE.wait();&lt;br /&gt;
				waitingE--;&lt;br /&gt;
			}&lt;br /&gt;
			toE = true;&lt;br /&gt;
			n++;&lt;br /&gt;
&lt;br /&gt;
			/* Se possibile, sblocco eventuali altri veicoli in attesa per la stessa direzione.&lt;br /&gt;
			 * Questo non crea starvation in quanto sono sicuramente un numero limitato. */&lt;br /&gt;
			if (n &amp;lt; N &amp;amp;&amp;amp; waitingW == 0)&lt;br /&gt;
				okE.signal();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	procedure entry exit(Vehicle vehicle)&lt;br /&gt;
	{&lt;br /&gt;
		n--;&lt;br /&gt;
		/* Se nessuno sta attraversando il ponte */&lt;br /&gt;
		if (n == 0)&lt;br /&gt;
		{&lt;br /&gt;
			// [Case 1] L'ultimo ad attraversare andava in direzione Ovest&lt;br /&gt;
			if (vehicle.To == 'W')&lt;br /&gt;
			{&lt;br /&gt;
			   /* Se esiste, attivo il veicolo che per primo si era messo&lt;br /&gt;
			      in attesa per la direzione opposta */&lt;br /&gt;
			   if (waitingE &amp;gt; 0)&lt;br /&gt;
				okE.signal();&lt;br /&gt;
			   else&lt;br /&gt;
				okW.signal();&lt;br /&gt;
			}&lt;br /&gt;
			// [Case 2] L'ultimo ad attraversare andava in direzione Est&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
			   /* Se esiste, attivo il veicolo che per primo si era messo&lt;br /&gt;
		              in attesa per la direzione opposta */&lt;br /&gt;
			   if (waitingW &amp;gt; 0)&lt;br /&gt;
				okW.signal();&lt;br /&gt;
			   else&lt;br /&gt;
				okE.signal();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=471</id>
		<title>ProvaTeorica 2014.01.22</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=471"/>
		<updated>2014-03-19T08:12:22Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
URL: http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
&lt;br /&gt;
@author: Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=enqueue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		        q=enqueue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=head(q);                          /* leggo la prossima auto che aspetta di entrare */&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)     /*nessuna auto in transito nel ponte o il prossimo va nella stessa direzione*/&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
                }&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
	ovest--;&lt;br /&gt;
	r=head(q);                          /* leggo la prossima auto che aspetta di entrare */&lt;br /&gt;
		if(ovest == 0 || r == &amp;quot;O&amp;quot;)	 /*nessuna auto in transito nel ponte o il prossimo va nella stessa direzione*/&lt;br /&gt;
		{&lt;br /&gt;
		turn = 0;	/*avanti un altro */&lt;br /&gt;
		}&lt;br /&gt;
		if(!empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q.dequeue();		&lt;br /&gt;
		oktomove.signal();	/*segnale*/&lt;br /&gt;
	        }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * URL: http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
 * author: Tommaso Ognibene&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
monitor bridge&lt;br /&gt;
{&lt;br /&gt;
	condition okE;    // attraversare in direzione Est&lt;br /&gt;
	condition okW;    // attraversare in direzione Ovest&lt;br /&gt;
	int n = 0;        // numero di veicoli sul ponte&lt;br /&gt;
	int waitingE = 0; // numero di veicoli che attendono di attraversare in direzione Est&lt;br /&gt;
	int waitingW = 0; // numero di veicoli che attendono di attraversare in direzione Ovest&lt;br /&gt;
	bool toE = true;  // direzione di attraversamento&lt;br /&gt;
&lt;br /&gt;
	procedure entry enter(Vehicle vehicle)&lt;br /&gt;
	{&lt;br /&gt;
		// [Case 1] Il veicolo vuole attraversare in direzione Ovest&lt;br /&gt;
		if (vehicle.To == 'W')&lt;br /&gt;
		{&lt;br /&gt;
			/* Se - il numero di veicoli sul ponte ha raggiunto il massimo; oppure&lt;br /&gt;
			      - qualcuno sta attraversando in direzione opposta; oppure&lt;br /&gt;
			      - qualcuno sta attendendo di attraversare in direzione opposta */&lt;br /&gt;
			if (n == N || (toE &amp;amp;&amp;amp; n &amp;gt; 0) || (!toE &amp;amp;&amp;amp; waitingE &amp;gt; 0))&lt;br /&gt;
			{&lt;br /&gt;
				// Mi fermo e attendo di essere sbloccato&lt;br /&gt;
				waitingW++;&lt;br /&gt;
				okW.wait();&lt;br /&gt;
				waitingW--;&lt;br /&gt;
			}&lt;br /&gt;
			toE = false;&lt;br /&gt;
			n++;&lt;br /&gt;
			&lt;br /&gt;
			/* Se possibile, sblocco eventuali altri veicoli in attesa per la stessa direzione.&lt;br /&gt;
			 * Questo non crea starvation in quanto sono sicuramente un numero limitato. */&lt;br /&gt;
			if (n &amp;lt; N &amp;amp;&amp;amp; waitingE == 0)&lt;br /&gt;
				okW.signal();&lt;br /&gt;
		}&lt;br /&gt;
		// [Case 2] Il veicolo vuole attraversare in direzione Est&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
			/* Se - il numero di veicoli sul ponte ha raggiunto il massimo; oppure&lt;br /&gt;
			      - qualcuno sta attraversando in direzione opposta; oppure&lt;br /&gt;
			      - qualcuno sta attendendo di attraversare in direzione opposta */&lt;br /&gt;
			if (n == N || (!toE &amp;amp;&amp;amp; n &amp;gt; 0) || (toE &amp;amp;&amp;amp; waitingW &amp;gt; 0))&lt;br /&gt;
			{&lt;br /&gt;
			        // Mi fermo e attendo di essere sbloccato&lt;br /&gt;
				waitingE++;&lt;br /&gt;
				okE.wait();&lt;br /&gt;
				waitingE--;&lt;br /&gt;
			}&lt;br /&gt;
			toE = true;&lt;br /&gt;
			n++;&lt;br /&gt;
&lt;br /&gt;
			/* Se possibile, sblocco eventuali altri veicoli in attesa per la stessa direzione.&lt;br /&gt;
			 * Questo non crea starvation in quanto sono sicuramente un numero limitato. */&lt;br /&gt;
			if (n &amp;lt; N &amp;amp;&amp;amp; waitingW == 0)&lt;br /&gt;
				okE.signal();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	procedure entry exit(Vehicle vehicle)&lt;br /&gt;
	{&lt;br /&gt;
		n--;&lt;br /&gt;
		/* Se nessuno sta attraversando il ponte */&lt;br /&gt;
		if (n == 0)&lt;br /&gt;
		{&lt;br /&gt;
			// [Case 1] L'ultimo ad attraversare andava in direzione Ovest&lt;br /&gt;
			if (vehicle.To == 'W')&lt;br /&gt;
			{&lt;br /&gt;
			   /* Se esiste, attivo il veicolo che per primo si era messo&lt;br /&gt;
			      in attesa per la direzione opposta */&lt;br /&gt;
			   if (waitingE &amp;gt; 0)&lt;br /&gt;
				okE.signal();&lt;br /&gt;
			   else&lt;br /&gt;
				okW.signal();&lt;br /&gt;
			}&lt;br /&gt;
			// [Case 2] L'ultimo ad attraversare andava in direzione Est&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
			   /* Se esiste, attivo il veicolo che per primo si era messo&lt;br /&gt;
		              in attesa per la direzione opposta */&lt;br /&gt;
			   if (waitingW &amp;gt; 0)&lt;br /&gt;
				okW.signal();&lt;br /&gt;
			   else&lt;br /&gt;
				okE.signal();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=428</id>
		<title>ProvaTeorica 2014.01.22</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=428"/>
		<updated>2014-03-15T15:22:13Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
URL: http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
&lt;br /&gt;
@author: Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		        q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
                }&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
	ovest--;&lt;br /&gt;
        r=tail(q);&lt;br /&gt;
		if(ovest == 0 || r == &amp;quot;O&amp;quot;)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
		{&lt;br /&gt;
		turn = 0;	/*avanti un altro */&lt;br /&gt;
		}&lt;br /&gt;
		if(!empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q.dequeue();		&lt;br /&gt;
		oktomove.signal();	/*segnale*/&lt;br /&gt;
	        }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=427</id>
		<title>ProvaTeorica 2014.01.22</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=427"/>
		<updated>2014-03-14T23:24:42Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
URL: http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
&lt;br /&gt;
@author: Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		        q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
                }&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
	ovest--;&lt;br /&gt;
		if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
		{&lt;br /&gt;
		turn = 0;	/*avanti un altro */&lt;br /&gt;
		}&lt;br /&gt;
		if(!empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q.dequeue();		&lt;br /&gt;
		oktomove.signal();	/*segnale*/&lt;br /&gt;
	        }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=426</id>
		<title>ProvaTeorica 2014.01.22</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=426"/>
		<updated>2014-03-14T23:20:43Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
URL: http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
&lt;br /&gt;
@author: Alessandro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		        q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=425</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Main_Page&amp;diff=425"/>
		<updated>2014-03-14T23:17:56Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo &amp;amp;egrave; il Wiki del Corso di Sistemi Operativi&lt;br /&gt;
&lt;br /&gt;
[[Esercizi a caso del Prof.]]&lt;br /&gt;
&lt;br /&gt;
[[Decalogo di Programmazione Concorrente]]&lt;br /&gt;
&lt;br /&gt;
[[Python Programma tieni punteggio.]]&lt;br /&gt;
&lt;br /&gt;
[[Comandi visti alle lezioni.]]&lt;br /&gt;
&lt;br /&gt;
[[SYS CALL viste a lezione.]]&lt;br /&gt;
&lt;br /&gt;
[[Parametri con getopt().]]&lt;br /&gt;
&lt;br /&gt;
[[Funzione con numero variabile di parametri.]]&lt;br /&gt;
&lt;br /&gt;
[[stampf - implementazione ridotta della printf.]]&lt;br /&gt;
&lt;br /&gt;
[[ProvaPratica 2013.09.13]]&lt;br /&gt;
&lt;br /&gt;
[[ProvaPratica 2013.07.18]]&lt;br /&gt;
&lt;br /&gt;
[[ProvaPratica 2013.06.21]]&lt;br /&gt;
&lt;br /&gt;
[[ProvaPratica 2013.05.29]]&lt;br /&gt;
&lt;br /&gt;
[[ProvaPratica 2013.02.15]]&lt;br /&gt;
&lt;br /&gt;
[[ProvaPratica 2013.01.25]]&lt;br /&gt;
&lt;br /&gt;
[[ProvaTeoria_2011.07.25]]&lt;br /&gt;
&lt;br /&gt;
[[ProvaTeorica_2014.01.22]]&lt;br /&gt;
----&lt;br /&gt;
Ricordate che per creare un account o quando viene richiesto di risolvere un semplice calcolo occorre ricordare quanto scritto [[qui]]&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=424</id>
		<title>ProvaTeorica 2014.01.22</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=424"/>
		<updated>2014-03-14T23:16:02Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: /* ProvaTeorica 2014.01.22 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		        q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=423</id>
		<title>ProvaTeorica 2014.01.22</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2014.01.22&amp;diff=423"/>
		<updated>2014-03-14T23:15:40Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: Created page with &amp;quot;== ProvaTeorica 2014.01.22 ==  &amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;  http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf   monitor bridge { condition oktomove;	/*si muove solo s...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ProvaTeorica 2014.01.22 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		        q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:AlexJ&amp;diff=422</id>
		<title>User talk:AlexJ</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:AlexJ&amp;diff=422"/>
		<updated>2014-03-14T23:12:43Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: /* ProvaTeorica 2014.01.22 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ProvaTeorica 2014.01.22 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		        q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:AlexJ&amp;diff=421</id>
		<title>User talk:AlexJ</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:AlexJ&amp;diff=421"/>
		<updated>2014-03-14T23:11:43Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: /* ProvaTeorica 2014.01.22 */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ProvaTeorica 2014.01.22 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:AlexJ&amp;diff=420</id>
		<title>User:AlexJ</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:AlexJ&amp;diff=420"/>
		<updated>2014-03-14T23:06:53Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:AlexJ&amp;diff=419</id>
		<title>User talk:AlexJ</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:AlexJ&amp;diff=419"/>
		<updated>2014-03-14T22:59:33Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=418</id>
		<title>User talk:Python</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=418"/>
		<updated>2014-03-14T22:54:33Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esame 2014.01.22&lt;br /&gt;
&lt;br /&gt;
[[  http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf  ]]&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=417</id>
		<title>User talk:Python</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=417"/>
		<updated>2014-03-14T22:53:26Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: /* ProvaTeorica 2014.01.22  */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esame 2014.01.22&lt;br /&gt;
&lt;br /&gt;
[[  http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf  ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== ProvaTeorica 2014.01.22  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:AlexJ&amp;diff=416</id>
		<title>User talk:AlexJ</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:AlexJ&amp;diff=416"/>
		<updated>2014-03-14T22:46:56Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: AlexJ moved page User talk:AlexJ to User talk:Python&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[User talk:Python]]&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=415</id>
		<title>User talk:Python</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=415"/>
		<updated>2014-03-14T22:46:56Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: AlexJ moved page User talk:AlexJ to User talk:Python&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esame 2014.01.22&lt;br /&gt;
&lt;br /&gt;
[[  http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf  ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:AlexJ&amp;diff=414</id>
		<title>User:AlexJ</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:AlexJ&amp;diff=414"/>
		<updated>2014-03-14T22:46:55Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: AlexJ moved page User:AlexJ to User:Python&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[User:Python]]&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:Python&amp;diff=413</id>
		<title>User:Python</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:Python&amp;diff=413"/>
		<updated>2014-03-14T22:46:55Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: AlexJ moved page User:AlexJ to User:Python&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
#ESERCIZIO 3 ESAME 20 GIUGNO 2013&lt;br /&gt;
#Scrivere un programma python o uno script bash per cercare all'interno&lt;br /&gt;
#della directory corrente tutti i file che abbiano lo stesso contenuto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import os,sys&lt;br /&gt;
import filecmp&lt;br /&gt;
&lt;br /&gt;
def ordina(A,B):&lt;br /&gt;
    for i in range(0,len(B)) :&lt;br /&gt;
        for j in range(i,len(B)) :&lt;br /&gt;
            if(B[i]&amp;gt;B[j]) :&lt;br /&gt;
                A[i],A[j]=A[j],A[i]&lt;br /&gt;
                B[i],B[j]=B[j],B[i]&lt;br /&gt;
    return A,B&lt;br /&gt;
            &lt;br /&gt;
      &lt;br /&gt;
&lt;br /&gt;
def main() :&lt;br /&gt;
    A=[]&lt;br /&gt;
    B=[]&lt;br /&gt;
    l=[]&lt;br /&gt;
    H={}&lt;br /&gt;
    P=[]&lt;br /&gt;
    print os.getcwd()&lt;br /&gt;
    pa=os.getcwd()&lt;br /&gt;
    for root, dirs, files in os.walk(pa):&lt;br /&gt;
        if(root != pa):&lt;br /&gt;
            H[root]=0&lt;br /&gt;
    for root, dirs, files in os.walk(pa):&lt;br /&gt;
        if (root == pa) :&lt;br /&gt;
            for name in files :&lt;br /&gt;
                f = pa + '/' + name&lt;br /&gt;
                A = os.listdir(pa)&lt;br /&gt;
&lt;br /&gt;
    P = H.keys()&lt;br /&gt;
    for i in A :&lt;br /&gt;
        f = pa + '/' + i&lt;br /&gt;
        c = f in P&lt;br /&gt;
        if(c == 1) :&lt;br /&gt;
           A.remove(i)&lt;br /&gt;
    x=-1&lt;br /&gt;
    for root, dirs, files in os.walk(pa):&lt;br /&gt;
        if (root == pa) :&lt;br /&gt;
            for name in files :&lt;br /&gt;
                c = name in A&lt;br /&gt;
                if(c == 1) : &lt;br /&gt;
                    x=x+1&lt;br /&gt;
                    statinfo = os.stat(name)&lt;br /&gt;
                    B.insert(x,statinfo.st_size)&lt;br /&gt;
    print&lt;br /&gt;
    l=list()&lt;br /&gt;
    (A,B)=ordina(A,B)&lt;br /&gt;
    j=1&lt;br /&gt;
    c=0 &lt;br /&gt;
    z=0         &lt;br /&gt;
    for i in range(0,(len(A)-1)) :&lt;br /&gt;
        if(B[i] == B[j]) :&lt;br /&gt;
            F1 = open(A[i],'r')&lt;br /&gt;
            F2 = open(A[j],'r')&lt;br /&gt;
            if(filecmp.cmp(A[i], A[j])) :&lt;br /&gt;
                c=1&lt;br /&gt;
                if(z==0):&lt;br /&gt;
                    l.append(A[i])&lt;br /&gt;
                    z=1&lt;br /&gt;
                l.append(A[j])&lt;br /&gt;
            &lt;br /&gt;
        if (B[i] != B[j] and c==1):&lt;br /&gt;
            print &amp;quot;Questi file sono uguali di dimensione : &amp;quot;,B[i], &amp;quot;Byte&amp;quot;&lt;br /&gt;
            print l&lt;br /&gt;
            l=[]&lt;br /&gt;
            c=0&lt;br /&gt;
            z=0&lt;br /&gt;
            print&lt;br /&gt;
        j=j+1      &lt;br /&gt;
    if(c==1) :&lt;br /&gt;
        print &amp;quot;Questi file sono uguali di dimensione : &amp;quot;,B[i]&lt;br /&gt;
        print l      &lt;br /&gt;
    print&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot; :&lt;br /&gt;
    main()&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=412</id>
		<title>User talk:Python</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=412"/>
		<updated>2014-03-14T22:29:48Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esame 2014.01.22&lt;br /&gt;
&lt;br /&gt;
[[  http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf  ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=411</id>
		<title>User talk:Python</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=411"/>
		<updated>2014-03-14T22:27:57Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esame 2014.01.22&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.unibo.it/~renzo/so/compiti/2014.01.22.tot.pdf]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=410</id>
		<title>User talk:Python</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=410"/>
		<updated>2014-03-14T21:47:33Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;monitor bridge {&lt;br /&gt;
condition oktomove;	/*si muove solo se il ponte è libero o non ci sono auto che vengono nel senso opposto */&lt;br /&gt;
int turn=0;		/*indica il senso delle auto */&lt;br /&gt;
int est=0,ovest=0;      /*contatori delle auto da est e da ovest */&lt;br /&gt;
Queue q;		/*coda delle senso delle macchine in attesa */&lt;br /&gt;
&lt;br /&gt;
procedure entry enter (char EoW)&lt;br /&gt;
{&lt;br /&gt;
	if(EoW == &amp;quot;E&amp;quot;)		/* viene da est */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn == 2 || est &amp;gt;=N || !empty(q))  &lt;br /&gt;
		{&lt;br /&gt;
			q=equeue(&amp;quot;E&amp;quot;);		/*inserisco nella coda dei sensi*/	&lt;br /&gt;
			oktomove.wait();   	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 1;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	est++;&lt;br /&gt;
	}&lt;br /&gt;
	else		/* viene da ovest */&lt;br /&gt;
	{&lt;br /&gt;
		if(turn ==1 || ovest &amp;gt;=N || !empty(q))&lt;br /&gt;
		{&lt;br /&gt;
		q=equeue(&amp;quot;O&amp;quot;);		/*inserisco nella coda dei sensi*/&lt;br /&gt;
			oktomove.wait();	/*aspetta*/&lt;br /&gt;
									&lt;br /&gt;
		}&lt;br /&gt;
	turn = 2;	/*impongo il senso delle auto in circolo nel ponte */&lt;br /&gt;
	ovest++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
procedure entry exit(char EoW)&lt;br /&gt;
{&lt;br /&gt;
	char r;&lt;br /&gt;
	if(EoW == &amp;quot;O&amp;quot;)&lt;br /&gt;
	{&lt;br /&gt;
	est--;&lt;br /&gt;
	r=tail(q);&lt;br /&gt;
		if(est == 0 || r == &amp;quot;E&amp;quot;)&lt;br /&gt;
		{&lt;br /&gt;
		est--;&lt;br /&gt;
			if(est == 0)	/*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
		{&lt;br /&gt;
		ovest--;&lt;br /&gt;
			if(ovest == 0)	 /*nessuna auto in transito nel ponte */&lt;br /&gt;
			{&lt;br /&gt;
			turn = 0;	/*avanti un altro */&lt;br /&gt;
			}&lt;br /&gt;
			if(!empty(q))&lt;br /&gt;
			{&lt;br /&gt;
			q.dequeue();		&lt;br /&gt;
			oktomove.signal();	/*segnale*/&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User:Python&amp;diff=300</id>
		<title>User:Python</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User:Python&amp;diff=300"/>
		<updated>2013-11-23T15:53:55Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: Created page with &amp;quot; #ESERCIZIO 3 ESAME 20 GIUGNO 2013 #Scrivere un programma python o uno script bash per cercare all'interno #della directory corrente tutti i file che abbiano lo stesso contenu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
#ESERCIZIO 3 ESAME 20 GIUGNO 2013&lt;br /&gt;
#Scrivere un programma python o uno script bash per cercare all'interno&lt;br /&gt;
#della directory corrente tutti i file che abbiano lo stesso contenuto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import os,sys&lt;br /&gt;
import filecmp&lt;br /&gt;
&lt;br /&gt;
def ordina(A,B):&lt;br /&gt;
    for i in range(0,len(B)) :&lt;br /&gt;
        for j in range(i,len(B)) :&lt;br /&gt;
            if(B[i]&amp;gt;B[j]) :&lt;br /&gt;
                A[i],A[j]=A[j],A[i]&lt;br /&gt;
                B[i],B[j]=B[j],B[i]&lt;br /&gt;
    return A,B&lt;br /&gt;
            &lt;br /&gt;
      &lt;br /&gt;
&lt;br /&gt;
def main() :&lt;br /&gt;
    A=[]&lt;br /&gt;
    B=[]&lt;br /&gt;
    l=[]&lt;br /&gt;
    H={}&lt;br /&gt;
    P=[]&lt;br /&gt;
    print os.getcwd()&lt;br /&gt;
    pa=os.getcwd()&lt;br /&gt;
    for root, dirs, files in os.walk(pa):&lt;br /&gt;
        if(root != pa):&lt;br /&gt;
            H[root]=0&lt;br /&gt;
    for root, dirs, files in os.walk(pa):&lt;br /&gt;
        if (root == pa) :&lt;br /&gt;
            for name in files :&lt;br /&gt;
                f = pa + '/' + name&lt;br /&gt;
                A = os.listdir(pa)&lt;br /&gt;
&lt;br /&gt;
    P = H.keys()&lt;br /&gt;
    for i in A :&lt;br /&gt;
        f = pa + '/' + i&lt;br /&gt;
        c = f in P&lt;br /&gt;
        if(c == 1) :&lt;br /&gt;
           A.remove(i)&lt;br /&gt;
    x=-1&lt;br /&gt;
    for root, dirs, files in os.walk(pa):&lt;br /&gt;
        if (root == pa) :&lt;br /&gt;
            for name in files :&lt;br /&gt;
                c = name in A&lt;br /&gt;
                if(c == 1) : &lt;br /&gt;
                    x=x+1&lt;br /&gt;
                    statinfo = os.stat(name)&lt;br /&gt;
                    B.insert(x,statinfo.st_size)&lt;br /&gt;
    print&lt;br /&gt;
    l=list()&lt;br /&gt;
    (A,B)=ordina(A,B)&lt;br /&gt;
    j=1&lt;br /&gt;
    c=0 &lt;br /&gt;
    z=0         &lt;br /&gt;
    for i in range(0,(len(A)-1)) :&lt;br /&gt;
        if(B[i] == B[j]) :&lt;br /&gt;
            F1 = open(A[i],'r')&lt;br /&gt;
            F2 = open(A[j],'r')&lt;br /&gt;
            if(filecmp.cmp(A[i], A[j])) :&lt;br /&gt;
                c=1&lt;br /&gt;
                if(z==0):&lt;br /&gt;
                    l.append(A[i])&lt;br /&gt;
                    z=1&lt;br /&gt;
                l.append(A[j])&lt;br /&gt;
            &lt;br /&gt;
        if (B[i] != B[j] and c==1):&lt;br /&gt;
            print &amp;quot;Questi file sono uguali di dimensione : &amp;quot;,B[i], &amp;quot;Byte&amp;quot;&lt;br /&gt;
            print l&lt;br /&gt;
            l=[]&lt;br /&gt;
            c=0&lt;br /&gt;
            z=0&lt;br /&gt;
            print&lt;br /&gt;
        j=j+1      &lt;br /&gt;
    if(c==1) :&lt;br /&gt;
        print &amp;quot;Questi file sono uguali di dimensione : &amp;quot;,B[i]&lt;br /&gt;
        print l      &lt;br /&gt;
    print&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot; :&lt;br /&gt;
    main()&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=299</id>
		<title>User talk:Python</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=299"/>
		<updated>2013-11-23T15:53:41Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=298</id>
		<title>User talk:Python</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=User_talk:Python&amp;diff=298"/>
		<updated>2013-11-23T15:52:38Z</updated>

		<summary type="html">&lt;p&gt;AlexJ: Created page with &amp;quot; #ESERCIZIO 3 ESAME 20 GIUGNO 2013 #Scrivere un programma python o uno script bash per cercare all'interno #della directory corrente tutti i file che abbiano lo stesso contenu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
#ESERCIZIO 3 ESAME 20 GIUGNO 2013&lt;br /&gt;
#Scrivere un programma python o uno script bash per cercare all'interno&lt;br /&gt;
#della directory corrente tutti i file che abbiano lo stesso contenuto&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import os,sys&lt;br /&gt;
import filecmp&lt;br /&gt;
&lt;br /&gt;
def ordina(A,B):&lt;br /&gt;
    for i in range(0,len(B)) :&lt;br /&gt;
        for j in range(i,len(B)) :&lt;br /&gt;
            if(B[i]&amp;gt;B[j]) :&lt;br /&gt;
                A[i],A[j]=A[j],A[i]&lt;br /&gt;
                B[i],B[j]=B[j],B[i]&lt;br /&gt;
    return A,B&lt;br /&gt;
            &lt;br /&gt;
      &lt;br /&gt;
&lt;br /&gt;
def main() :&lt;br /&gt;
    A=[]&lt;br /&gt;
    B=[]&lt;br /&gt;
    l=[]&lt;br /&gt;
    H={}&lt;br /&gt;
    P=[]&lt;br /&gt;
    print os.getcwd()&lt;br /&gt;
    pa=os.getcwd()&lt;br /&gt;
    for root, dirs, files in os.walk(pa):&lt;br /&gt;
        if(root != pa):&lt;br /&gt;
            H[root]=0&lt;br /&gt;
    for root, dirs, files in os.walk(pa):&lt;br /&gt;
        if (root == pa) :&lt;br /&gt;
            for name in files :&lt;br /&gt;
                f = pa + '/' + name&lt;br /&gt;
                A = os.listdir(pa)&lt;br /&gt;
&lt;br /&gt;
    P = H.keys()&lt;br /&gt;
    for i in A :&lt;br /&gt;
        f = pa + '/' + i&lt;br /&gt;
        c = f in P&lt;br /&gt;
        if(c == 1) :&lt;br /&gt;
           A.remove(i)&lt;br /&gt;
    x=-1&lt;br /&gt;
    for root, dirs, files in os.walk(pa):&lt;br /&gt;
        if (root == pa) :&lt;br /&gt;
            for name in files :&lt;br /&gt;
                c = name in A&lt;br /&gt;
                if(c == 1) : &lt;br /&gt;
                    x=x+1&lt;br /&gt;
                    statinfo = os.stat(name)&lt;br /&gt;
                    B.insert(x,statinfo.st_size)&lt;br /&gt;
    print&lt;br /&gt;
    l=list()&lt;br /&gt;
    (A,B)=ordina(A,B)&lt;br /&gt;
    j=1&lt;br /&gt;
    c=0 &lt;br /&gt;
    z=0         &lt;br /&gt;
    for i in range(0,(len(A)-1)) :&lt;br /&gt;
        if(B[i] == B[j]) :&lt;br /&gt;
            F1 = open(A[i],'r')&lt;br /&gt;
            F2 = open(A[j],'r')&lt;br /&gt;
            if(filecmp.cmp(A[i], A[j])) :&lt;br /&gt;
                c=1&lt;br /&gt;
                if(z==0):&lt;br /&gt;
                    l.append(A[i])&lt;br /&gt;
                    z=1&lt;br /&gt;
                l.append(A[j])&lt;br /&gt;
            &lt;br /&gt;
        if (B[i] != B[j] and c==1):&lt;br /&gt;
            print &amp;quot;Questi file sono uguali di dimensione : &amp;quot;,B[i], &amp;quot;Byte&amp;quot;&lt;br /&gt;
            print l&lt;br /&gt;
            l=[]&lt;br /&gt;
            c=0&lt;br /&gt;
            z=0&lt;br /&gt;
            print&lt;br /&gt;
        j=j+1      &lt;br /&gt;
    if(c==1) :&lt;br /&gt;
        print &amp;quot;Questi file sono uguali di dimensione : &amp;quot;,B[i]&lt;br /&gt;
        print l      &lt;br /&gt;
    print&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot; :&lt;br /&gt;
    main()&lt;/div&gt;</summary>
		<author><name>AlexJ</name></author>
	</entry>
</feed>