<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://so.v2.cs.unibo.it/wiki/index.php?action=history&amp;feed=atom&amp;title=2017.09.11</id>
	<title>2017.09.11 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://so.v2.cs.unibo.it/wiki/index.php?action=history&amp;feed=atom&amp;title=2017.09.11"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=2017.09.11&amp;action=history"/>
	<updated>2026-05-05T00:04:45Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=2017.09.11&amp;diff=2195&amp;oldid=prev</id>
		<title>Matt: Created page with &quot;Pdf completo qui: [http://www.cs.unibo.it/~renzo/so/compiti/2017.09.11.tot.pdf 2017.09.11.tot.pdf]  =Esercizio c1= &lt;syntaxhighlight lang=c&gt; Un semaforo intelligente controlla ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=2017.09.11&amp;diff=2195&amp;oldid=prev"/>
		<updated>2018-05-09T15:51:39Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Pdf completo qui: [http://www.cs.unibo.it/~renzo/so/compiti/2017.09.11.tot.pdf 2017.09.11.tot.pdf]  =Esercizio c1= &amp;lt;syntaxhighlight lang=c&amp;gt; Un semaforo intelligente controlla ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Pdf completo qui: [http://www.cs.unibo.it/~renzo/so/compiti/2017.09.11.tot.pdf 2017.09.11.tot.pdf]&lt;br /&gt;
&lt;br /&gt;
=Esercizio c1=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
Un semaforo intelligente controlla un incrocio al quale si può accedere da 4 direzioni N, E, S, W. &lt;br /&gt;
Un solo veicolo alla volta deve occupare l’area dell’incrocio. &lt;br /&gt;
Se sono presenti veicoli da tutte le direzioni, il semaforo fa avanzare ciclicamente un veicolo da ogni direzione (NESWNESWNESW…). &lt;br /&gt;
Se nessun veicolo è in attesa da una direzione, il turno viene saltato.&lt;br /&gt;
Quella che segue è la porzione di di programma eseguita dai veicoli per passare attraverso l’incrocio:&lt;br /&gt;
&lt;br /&gt;
 	crossing.enter(direction)&lt;br /&gt;
 	…critical section&lt;br /&gt;
 	crossing.exit(direction)&lt;br /&gt;
&lt;br /&gt;
Nonostante sia un semaforo, questo esercizio deve venir risolto coi monitor.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Soluzione proposta 1'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
monitor crossing{&lt;br /&gt;
	&lt;br /&gt;
	enum direction = {N, E, S, W};&lt;br /&gt;
	condition ok2cross[4];&lt;br /&gt;
	boolean busy;&lt;br /&gt;
	int waiting[4];&lt;br /&gt;
&lt;br /&gt;
	procedure_entry void enter(enum direction d){&lt;br /&gt;
		waiting[d]++;&lt;br /&gt;
		if(waiting[d] &amp;gt; 1) ok2cross[d].wait();&lt;br /&gt;
		busy = true;&lt;br /&gt;
		waiting[d]--;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	procedure_entry void exit(enum direction d){&lt;br /&gt;
		busy = false;&lt;br /&gt;
		for(int i = 1; i &amp;lt; 5; i++){ &lt;br /&gt;
			if(waiting[(d + i) % 4]) ok2cross[(d + i) % 4].signal();&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	crossing(){&lt;br /&gt;
		for(int i = 0; i &amp;lt; 4; i++) waiting[i] = 0;&lt;br /&gt;
		busy = false;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Matt</name></author>
	</entry>
</feed>