<?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=DRA</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=DRA"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php/Special:Contributions/DRA"/>
	<updated>2026-05-01T09:13:34Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Cravatte_AA_2022/23&amp;diff=2796</id>
		<title>Cravatte AA 2022/23</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Cravatte_AA_2022/23&amp;diff=2796"/>
		<updated>2022-10-21T13:10:58Z</updated>

		<summary type="html">&lt;p&gt;DRA: Bozza pagina lista cravatte AA 22/23&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Under construction}}&lt;br /&gt;
= Lista Cravatte A.A. 2022-2023 =&lt;br /&gt;
==  Mercoledì 21 Settembre ==&lt;br /&gt;
Cravatta di presentazione con QR Code della mail&lt;br /&gt;
==  Giovedì 22 Settembre ==&lt;br /&gt;
Simboli di accensione/spegnimento verdi su sfondo nero&lt;br /&gt;
==  Mercoledì 28 Settembre ==&lt;br /&gt;
Escher, Tassellazione dello spezio con lucertole in sfumature di celeste&lt;br /&gt;
==  Giovedì 29 Settembre ==&lt;br /&gt;
Stele di Rosetta&lt;br /&gt;
==  Mercoledì 5 Ottobre ==&lt;br /&gt;
Escher &amp;quot;Altro Mondo II&amp;quot;&lt;br /&gt;
==  Giovedì 6 Ottobre ==&lt;br /&gt;
Foto tastiera&lt;br /&gt;
==  Mercoledì 12 Ottobre ==&lt;br /&gt;
Gaudí, panchine di Parco Güell&lt;br /&gt;
==  Giovedì 13 Ottobre ==&lt;br /&gt;
Monet ninfee&lt;br /&gt;
==  Mercoledì 19 Ottobre ==&lt;br /&gt;
Gaudí piastrelle esagonali Passeig de Gràcia&lt;br /&gt;
==  Giovedì 20 Ottobre ==&lt;br /&gt;
Pinguini che ballano su sfondo scuro&lt;/div&gt;</summary>
		<author><name>DRA</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=20220906c2&amp;diff=2789</id>
		<title>20220906c2</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=20220906c2&amp;diff=2789"/>
		<updated>2022-10-19T17:55:14Z</updated>

		<summary type="html">&lt;p&gt;DRA: Aggiunta la consegna&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In questa pagina sono presenti alcune soluzioni (possibilmente con errore) per l'esercizio C2 dell'esame 2022/09/06.&lt;br /&gt;
Il lettore è invitato a immedesimare il professore al momento della correzione durante la lettura delle soluzioni.&lt;br /&gt;
&lt;br /&gt;
== Consegna ==&lt;br /&gt;
Usando i semafori implementare un servizio che preveda due funzioni:&lt;br /&gt;
   void sumstop(int v)&lt;br /&gt;
   int sumgo(void) &lt;br /&gt;
La funzione sumstop deve mettere il processo chiamante in attesa.&lt;br /&gt;
La funzione sumgo deve sbloccare tutti i processi messi in attesa con la sumstop e restituire la somma algebrica dei valori passati come parametro alla  sumstop dai processi che sono stati sbloccati (zero se la  sumgo viene richiamata quando non c'è nessun processo bloccato).&lt;br /&gt;
== 1 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
semaphore sem(1);&lt;br /&gt;
int sum=0;&lt;br /&gt;
queue q;&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	if i &amp;lt; 0:&lt;br /&gt;
		q.enqueue(v)&lt;br /&gt;
		sem.P()&lt;br /&gt;
	else&lt;br /&gt;
		i--&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	for each elem in q:&lt;br /&gt;
		int val=q.dequeue()&lt;br /&gt;
		sum=sum + val&lt;br /&gt;
	return sum&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 2 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
queue values;&lt;br /&gt;
semaphore s(0);&lt;br /&gt;
int sum=0;&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	s.P()&lt;br /&gt;
	values.enqueue(v)&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	while !value.isEmpty():&lt;br /&gt;
		s.V()&lt;br /&gt;
		mutex.P()&lt;br /&gt;
		sum=sum+values.dequeue()&lt;br /&gt;
		mutex.v()&lt;br /&gt;
	return sum&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 3 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shared int sum=0;&lt;br /&gt;
semaphore wait(0);&lt;br /&gt;
semaphore mutex(1);&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	mutex.P();&lt;br /&gt;
	sum = sum + v;&lt;br /&gt;
	mutex.V();&lt;br /&gt;
	wait.P();&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	wait.V();&lt;br /&gt;
	somma = sum;&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	sum = 0&lt;br /&gt;
	mutex.V()&lt;br /&gt;
	return somma;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 4 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
queue&amp;lt;int&amp;gt; processlist;&lt;br /&gt;
semaphore mutex(1);&lt;br /&gt;
semaphore s(0);&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	mutex.P();&lt;br /&gt;
	processlist.enqueue(v);&lt;br /&gt;
	mutex.P();&lt;br /&gt;
	S.P();&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	int sum = 0;&lt;br /&gt;
	mutex.P();&lt;br /&gt;
	while processlist.top() != NULL:&lt;br /&gt;
		sum += processlist.dequeue();&lt;br /&gt;
		S.V();&lt;br /&gt;
	mutex.V()&lt;br /&gt;
	return sum;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 5 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int counter = 0;&lt;br /&gt;
int sum = 0;&lt;br /&gt;
semaphore mutex(1);&lt;br /&gt;
semaphore blocked(0);&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	mutex.P();&lt;br /&gt;
	sum+=v;&lt;br /&gt;
	counter++;&lt;br /&gt;
	mutex.V();&lt;br /&gt;
	blocked.P();&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	  mutex.P();&lt;br /&gt;
		intret = sum;&lt;br /&gt;
		sum = 0;&lt;br /&gt;
		for (int i=0; i&amp;lt;counter; i++)&lt;br /&gt;
			blocked.V()&lt;br /&gt;
		counter = 0;&lt;br /&gt;
		mutex.V()&lt;br /&gt;
	return intret&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 6 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int sum = 0;&lt;br /&gt;
mutex = new semaphore(1);&lt;br /&gt;
queue q;&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	mutex.P();&lt;br /&gt;
	sum += v;&lt;br /&gt;
	sintpid = getpid();&lt;br /&gt;
	suspend(pid);&lt;br /&gt;
	mutex.V();&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	mutex.P();&lt;br /&gt;
	while !q.empty():&lt;br /&gt;
		resume(q.dequeue())&lt;br /&gt;
	int value = sum;&lt;br /&gt;
	sum = 0;&lt;br /&gt;
	return value;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 7 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int nP, nV = -1, 0;&lt;br /&gt;
int somma = 0&lt;br /&gt;
int val[]&lt;br /&gt;
semaphore mutex(1);&lt;br /&gt;
semaphore s(0);&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	val[nP++].add[v]&lt;br /&gt;
	s.P()&lt;br /&gt;
	np--&lt;br /&gt;
	v[0].delete&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	mutex.P();&lt;br /&gt;
	nV++&lt;br /&gt;
	if nP &amp;gt; 0:&lt;br /&gt;
		s.V()&lt;br /&gt;
		for (int i=0; i&amp;lt;nV; i++)&lt;br /&gt;
			somma += val[i]&lt;br /&gt;
			nv--&lt;br /&gt;
	else&lt;br /&gt;
		mutex.V()&lt;br /&gt;
	return somma&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 8 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct blocked {&lt;br /&gt;
	semaphore sem(0);&lt;br /&gt;
	int value = 0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
semaphore mutex(1);&lt;br /&gt;
list&amp;lt;blocked&amp;gt; procs = new list&amp;lt;blocked&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	blocked bl = new blocked();&lt;br /&gt;
	bl.value = v&lt;br /&gt;
	procs.add(bl)&lt;br /&gt;
	bl.sem.P()&lt;br /&gt;
	mutex.V()&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	mutex.P();&lt;br /&gt;
	int count = 0;&lt;br /&gt;
	foreach proc in procs:&lt;br /&gt;
		count += proc.value&lt;br /&gt;
		procs.remove(proc)&lt;br /&gt;
		proc.sem.V()&lt;br /&gt;
	mutex.V()&lt;br /&gt;
	return count;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 9 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
semaphore s[] new sem(0)&lt;br /&gt;
semaphore s1 new sem(0)&lt;br /&gt;
int tot, waiting = 0;&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	waiting++&lt;br /&gt;
	s[waiting - 1].P()&lt;br /&gt;
	waiting--&lt;br /&gt;
	tot = tot + v&lt;br /&gt;
	if waiting == 0:&lt;br /&gt;
		s1.V()&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	if waiting = 0:&lt;br /&gt;
		return 0&lt;br /&gt;
	for (i = waiting -1; i == 0; i--)&lt;br /&gt;
		s[i].V()&lt;br /&gt;
	s1.P() // per aspettare che tutti abbiano fatto la somma&lt;br /&gt;
	return tot&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int nw = 0&lt;br /&gt;
int currsum = 0&lt;br /&gt;
semaphore mutex(1)&lt;br /&gt;
semaphore wait2go(0)&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	currsum += v;&lt;br /&gt;
	nw++;&lt;br /&gt;
	mutex.V()&lt;br /&gt;
	wait2go.P()&lt;br /&gt;
	if --nw &amp;gt; 0:&lt;br /&gt;
		wait2go.V()&lt;br /&gt;
	else&lt;br /&gt;
		mutex.V()&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	mutex.P();&lt;br /&gt;
	if nw == 0:&lt;br /&gt;
		mutex.V()&lt;br /&gt;
		return 0;&lt;br /&gt;
	int sum = cursum;&lt;br /&gt;
	cursum = 0;&lt;br /&gt;
	wait2go.V();&lt;br /&gt;
	return sum&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 11==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
semaphore mutex(1);&lt;br /&gt;
semaphore semwait(0);&lt;br /&gt;
int sum=0;&lt;br /&gt;
int wait=0;&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	wait++&lt;br /&gt;
	sum += v;&lt;br /&gt;
	mutex.V()&lt;br /&gt;
	semwait.P()&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	wait--;&lt;br /&gt;
	mutex.V()&lt;br /&gt;
	if wait &amp;gt; 0:&lt;br /&gt;
		semwait.V()&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	if wait == 0:&lt;br /&gt;
		return 0&lt;br /&gt;
	semwait.V();&lt;br /&gt;
	while (wait &amp;gt; 0) {}&lt;br /&gt;
	int val = sum&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	sum = 0;&lt;br /&gt;
	mutex.V()&lt;br /&gt;
	return val;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 12 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
semaphore mutex(0)&lt;br /&gt;
volatile int counter = 0&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	counter = counter + v;&lt;br /&gt;
	mutex.P()&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	int val = counter;&lt;br /&gt;
	while (mutex.value != 0)&lt;br /&gt;
		mutex.V()&lt;br /&gt;
	counter = 0;&lt;br /&gt;
	return counter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 13 == &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
semaphore mutex(1)&lt;br /&gt;
int sum = 0;&lt;br /&gt;
queue of semaphore q;&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	sum += v;&lt;br /&gt;
	s = new semaphore(0);&lt;br /&gt;
	q.enqueue(s)&lt;br /&gt;
	mutex.V()&lt;br /&gt;
	s.P()&lt;br /&gt;
	free(s)&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	int lsum = sum&lt;br /&gt;
	sum = 0&lt;br /&gt;
	while (!q.empty()):&lt;br /&gt;
		semaphore s = q.dequeue()&lt;br /&gt;
		s.V()&lt;br /&gt;
	mutex.V()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== 14 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
semaphore mutex(1)&lt;br /&gt;
int sum = 0;&lt;br /&gt;
queue of semaphore q;&lt;br /&gt;
&lt;br /&gt;
void sumstop(int v):&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	sum += v;&lt;br /&gt;
	s = new semaphore(0);&lt;br /&gt;
	q.enqueue(s)&lt;br /&gt;
	mutex.V()&lt;br /&gt;
	s.P()&lt;br /&gt;
	free(s)&lt;br /&gt;
	if(q.empty())&lt;br /&gt;
		mutex.V()&lt;br /&gt;
	else&lt;br /&gt;
		semaphore s = q.dequeue()&lt;br /&gt;
		s.V()&lt;br /&gt;
&lt;br /&gt;
int sumgo(void):&lt;br /&gt;
	mutex.P()&lt;br /&gt;
	int lsum = sum&lt;br /&gt;
	sum = 0&lt;br /&gt;
	if(q.empty())&lt;br /&gt;
		mutex.V()&lt;br /&gt;
	else&lt;br /&gt;
		semaphore s = q.dequeue()&lt;br /&gt;
		s.V()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 15 (soluzione proposta su telegram) ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=C&amp;gt;&lt;br /&gt;
#include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
#include &amp;quot;semaphore.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
semaphore s; // semaforo che blocca le somme&lt;br /&gt;
semaphore finished; // semaforo che indica che le somme sono state fatte&lt;br /&gt;
semaphore critical_section; // sarà utilizzata per decidere chi entra nella critical section&lt;br /&gt;
&lt;br /&gt;
volatile int sumstops = 0;&lt;br /&gt;
volatile int result;&lt;br /&gt;
&lt;br /&gt;
void *sumstop(int v) {&lt;br /&gt;
    semaphore_P(critical_section);&lt;br /&gt;
    sumstops++;&lt;br /&gt;
    semaphore_V(critical_section);&lt;br /&gt;
&lt;br /&gt;
    semaphore_P(s);&lt;br /&gt;
    printf(&amp;quot;summed %d\n&amp;quot;, v);&lt;br /&gt;
    result += v;&lt;br /&gt;
    semaphore_V(finished);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int sumgo(void) {&lt;br /&gt;
    semaphore_P(critical_section); // così sumstops è costante all'interno di questa section&lt;br /&gt;
    result = 0;&lt;br /&gt;
    for (int i = 0; i &amp;lt; sumstops; i++) {&lt;br /&gt;
        semaphore_V(s); // permetti alla somma di andare&lt;br /&gt;
        semaphore_P(finished); // aspetta che la somma sia finita prima di continuare&lt;br /&gt;
    }&lt;br /&gt;
    sumstops = 0; // reset number of blocked stops.&lt;br /&gt;
    semaphore_V(critical_section);&lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void *run_sumgo(void) {&lt;br /&gt;
    int res = sumgo();&lt;br /&gt;
    printf(&amp;quot;the result found is %d\n&amp;quot;, res);&lt;br /&gt;
    printf(&amp;quot;the result found is %d\n&amp;quot;, result);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    srand(time(NULL));&lt;br /&gt;
    s = semaphore_create(0);&lt;br /&gt;
    critical_section = semaphore_create(1);&lt;br /&gt;
    finished = semaphore_create(0);&lt;br /&gt;
&lt;br /&gt;
    int n = rand() % 50;&lt;br /&gt;
    pthread_t sumg, s[n];&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
        pthread_create(&amp;amp;s[i], NULL, sumstop, i);&lt;br /&gt;
    }&lt;br /&gt;
    pthread_create(&amp;amp;sumg, NULL, run_sumgo, NULL);&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
        pthread_join(s[i], NULL);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    pthread_join(sumg, NULL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Correzioni proposte ==&lt;br /&gt;
&lt;br /&gt;
Correzione proposta da [https://t.me/flecarts flecart]&lt;br /&gt;
&lt;br /&gt;
1. la variabile i non è inizializzata, sum e queue non sono protette in critical sections&lt;br /&gt;
&lt;br /&gt;
2. la coda value non è in una critical section, può creare errori nell'update di essa. &lt;br /&gt;
&lt;br /&gt;
3. sumgo libera solamente un singolo sumstop, perché chiama wait.V() una singola volta anche se ci sono più thread in attesa&lt;br /&gt;
&lt;br /&gt;
4. mutex.P() è chiamata due volte in sumstop(), se il secondo fosse mutex.V() credo sia corretto. &lt;br /&gt;
&lt;br /&gt;
5. mi sembra corretto&lt;br /&gt;
 &lt;br /&gt;
6. non si possono utilizzare suspend o resume (non si è fatto uso di semafori)&lt;br /&gt;
 &lt;br /&gt;
7. nP e nV mi sembrano superflue, in questo caso sicuramente scorrette perché se chiamo m volte sumstop e una volta sumgo, nV è al massimo 1&lt;br /&gt;
quindi è impossibile che riesca a contare correttamente tutte le somme.&lt;br /&gt;
 &lt;br /&gt;
8. Deadlock perché bl.sem.P() è chiamato prima che ls Critical Section venga rilasciata e sumgo ha bisogno di entrare in una CS.&lt;br /&gt;
 &lt;br /&gt;
9. waiting è una variabile globale modificata senza cs, e tot non è inizializzato.&lt;br /&gt;
 &lt;br /&gt;
10. simile a 3. wait2go è chiamata una volta quindi può liberare solamente un singolo thread si sumstop.&lt;br /&gt;
&lt;br /&gt;
11. busy waiting in sumgo.&lt;br /&gt;
&lt;br /&gt;
12. counter non è protetto da Critical section &lt;br /&gt;
&lt;br /&gt;
13. se sumgo ritornasse il valore  lsum sarebbe tutto apposto.&lt;br /&gt;
&lt;br /&gt;
14. mi sembra corretto&lt;br /&gt;
&lt;br /&gt;
15. mi sembra corretto&lt;/div&gt;</summary>
		<author><name>DRA</name></author>
	</entry>
</feed>