Difference between revisions of "ProvaTeoria 2012.01.12"
Jump to navigation
Jump to search
Stefano 92 (talk | contribs) |
Stefano 92 (talk | contribs) |
||
Line 33: | Line 33: | ||
pid index[N] /*index contiene gli id dei vari server*/ | pid index[N] /*index contiene gli id dei vari server*/ | ||
− | + | process server[0] | |
{ | { | ||
− | + | while(1) | |
− | + | { | |
+ | tmp msg=arecv(*); | ||
+ | for (i=1;i<N;i++) | ||
+ | asend(index[i],msg); | ||
+ | print(msg); | ||
+ | } | ||
} | } | ||
− | + | process server[1...N-1] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | process server[ | ||
{ | { | ||
− | |||
− | |||
while(1) | while(1) | ||
{ | { | ||
− | + | tmp msg=arecv(*) | |
− | if ( | + | if (tmp.sender==index[0]) |
− | + | print(msg); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
else | else | ||
− | + | asend(index[0],msg); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
+ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
-stefano92 | -stefano92 |
Revision as of 10:02, 7 May 2014
TESTO COMPITO
Esercizio 1
monitor seq
{
condition* c=List() /*lista di condizioni, una per ogni processo arrivato*/
int* procstack=Stack(); /*stack di processi per l'uscita LIFO*/
procedure entry enter()
{
procstack.push(this->p_id);
}
procedure entry exit()
{
if (procstack.Top()!=this->p_id){ /*cioè se il processo non è in cima allo stack*/
List.insert(this->p_id);
(List.search(this->p_id)).wait(); /*aggiungo il mio p_id alla lista di condizioni e mi metto in wait*/
}
List.remove(this->p_id);
procstack.Pop();
List.search(procstack.Top()).signal();
}
}
NOTA: Con questa soluzione se l'ultimo processo chiama la exit e ci sono altri processi in coda, gli altri processi usciranno prima che l'ultimo esca dallo urgent stack per uscire a sua volta, quindi non credo che rispetti la traccia. Però non ho trovato un'altra soluzione
Esercizio 2
pid index[N] /*index contiene gli id dei vari server*/
process server[0]
{
while(1)
{
tmp msg=arecv(*);
for (i=1;i<N;i++)
asend(index[i],msg);
print(msg);
}
}
process server[1...N-1]
{
while(1)
{
tmp msg=arecv(*)
if (tmp.sender==index[0])
print(msg);
else
asend(index[0],msg);
}
}
-stefano92