
Untitled
By: a guest on
Apr 24th, 2012 | syntax:
None | size: 1.05 KB | hits: 22 | expires: Never
CONCORRENZA
12 GENNAIO 2012
Il monitor seq da implementare deve fornire due procedure entry:
procedure entry void enter(void);
procedure entry void exit(void);
I processi chiamano i servizi di seq come segue:
....
seq.enter();
/* codice controllato da seq */
seq.exit();
....
Tutti i processi che ne facciano richiesta possono entrare nel codice controllato da seq contemporanamente (questa NON è una sezione critica!). Exit deve garantire che i processi escano dal codice controllato in ordine inverso rispetto alla sequenza di ingresso. Per esempio se tre processi a, b e c chiamano seq.enter in questo ordine b non potrà completare la exit se prima c non ha chiamato la exit. A dovrà attendere il completamento della exit sia di b sia di c per poter uscire.
mia soluzione:
monitor seq {
condition okExit;
int counter;
int x;
int y;
procedure entry void enter() {
counter++;
}
procedure entry void exit() {
x = counter;
y = x--;
if (x > y) { /* se C > B */
okExit.signal();
}
okExit.wait();
}
}