<?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=ProvaTeorica_2012.09.18</id>
	<title>ProvaTeorica 2012.09.18 - 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=ProvaTeorica_2012.09.18"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.09.18&amp;action=history"/>
	<updated>2026-04-20T02:31:27Z</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=ProvaTeorica_2012.09.18&amp;diff=435&amp;oldid=prev</id>
		<title>Stefano 92: Created page with &quot;Esercizio 1 &lt;syntaxhighlight lang=&quot;C&quot;&gt; /* Esercizio c.1: Per lo scopo di questo esercizio si ipotizzi la presenza di infiniti processi che si vogliono sincronizzare a  tre a t...&quot;</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=ProvaTeorica_2012.09.18&amp;diff=435&amp;oldid=prev"/>
		<updated>2014-03-16T18:03:13Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Esercizio 1 &amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt; /* Esercizio c.1: Per lo scopo di questo esercizio si ipotizzi la presenza di infiniti processi che si vogliono sincronizzare a  tre a t...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Esercizio 1&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Esercizio c.1: Per lo scopo di questo esercizio si ipotizzi la presenza di infiniti processi che si vogliono sincronizzare a &lt;br /&gt;
tre a tre sulla base di un contrassegno numerico (tag).&lt;br /&gt;
Ogni processo chiama la procedura di ingresso syn3 del monitor three (three.syn3) passando come parametro (in &lt;br /&gt;
input) un contrassegno numerico floating point (double) e un array di tre indentificativi di processo (in output).&lt;br /&gt;
Monitor three:&lt;br /&gt;
Procedure entry void syn3(double tag, pid_t proc[3])&lt;br /&gt;
….&lt;br /&gt;
Solo quando tre processi hanno chiamato la syn3 specificando lo stesso valore per tag posso proseguire nella &lt;br /&gt;
computazione. Il vettore proc conterra' gli identificativi dei tre processi (ogni processo quindi conoscera' &lt;br /&gt;
l'identificativo degli altri due che hanno consentito di proseguire).&lt;br /&gt;
Se per esempio il processo P1 richiama syn3 con il valore 3.14, poi P2 con 1.41, P3 con 2.71, P4 con 3.14, se a questo &lt;br /&gt;
punto arriva un processso P5 che chiama syn3 con valore 3.14 sblocca P1, P4 e P5 (P2 e P3 rimarranno in attesa che &lt;br /&gt;
altri processi richiamino syn3 con 1.41 o con 2.71). P1, P4 e P5 riceveranno nel vettore proc gli identificativi di P1, P2 &lt;br /&gt;
e P4.&lt;br /&gt;
typedef struct waiting_q&lt;br /&gt;
{&lt;br /&gt;
double tag;&lt;br /&gt;
condition oktogo;&lt;br /&gt;
p_id* waiting_process=Stack();&lt;br /&gt;
} waiting_q;&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
monitor three&lt;br /&gt;
{&lt;br /&gt;
	waiting_q* code=Stack(); /*pila di waiting_q*/&lt;br /&gt;
	procedure entry void syn3 (double val, pid_t proc[3])&lt;br /&gt;
	{&lt;br /&gt;
		waiting_q* local=code.searchByTag(val);&lt;br /&gt;
		if (!local)&lt;br /&gt;
			{&lt;br /&gt;
				waiting_q* tmp=new waiting_q;&lt;br /&gt;
				tmp-&amp;gt;tag=val;&lt;br /&gt;
				tmp-&amp;gt;waiting_process.push(this-&amp;gt;p_id);&lt;br /&gt;
				waiting_q.push(tmp);&lt;br /&gt;
				tmp-&amp;gt;oktogo.wait()&lt;br /&gt;
				&lt;br /&gt;
				while (!isEmpty(local.waiting_process))&lt;br /&gt;
				{&lt;br /&gt;
					local-&amp;gt;waiting_process.pop();&lt;br /&gt;
					local-&amp;gt;oktogo.signal();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			{&lt;br /&gt;
				if (local-&amp;gt;waiting_process.size()!=2)&lt;br /&gt;
				{&lt;br /&gt;
					local-&amp;gt;waiting_process.push(this-&amp;gt;p_id);&lt;br /&gt;
					local-&amp;gt;oktogo.wait();&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		while (!isEmpty(local.waiting_process))&lt;br /&gt;
			{&lt;br /&gt;
				local-&amp;gt;waiting_process.pop();&lt;br /&gt;
				local-&amp;gt;oktogo.signal();&lt;br /&gt;
			}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
-stefano92&lt;/div&gt;</summary>
		<author><name>Stefano 92</name></author>
	</entry>
</feed>