Difference between revisions of "ProvaTeoria 2012.01.12"
Jump to navigation
Jump to search
Stefano 92 (talk | contribs) (Created page with "=[http://www.cs.unibo.it/~renzo/so/compiti/2012-01-12.tot.pdf TESTO COMPITO]= ==Esercizio 1== <syntaxhighlight lang="C"> monitor seq { condition* c=List() int* procstack=St...") |
Stefano 92 (talk | contribs) |
||
Line 5: | Line 5: | ||
monitor seq | monitor seq | ||
{ | { | ||
− | condition* c=List() | + | condition* c=List() /*lista di condizioni, una per ogni processo arrivato*/ |
− | int* procstack=Stack(); | + | int* procstack=Stack(); /*stack di processi per l'uscita LIFO*/ |
procedure entry enter() | procedure entry enter() | ||
Line 15: | Line 15: | ||
procedure entry exit() | procedure entry exit() | ||
{ | { | ||
− | if (procstack.Top()!=this->p_id){ | + | if (procstack.Top()!=this->p_id){ /*cioè se il processo non è in cima allo stack*/ |
List.insert(this->p_id); | List.insert(this->p_id); | ||
− | (List.search(this->p_id)).wait(); | + | (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); | List.remove(this->p_id); |
Revision as of 10:51, 30 April 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 XD -stefano92