Un’altra primitiva di sincronizzazione ad alto livello è il tipo monitor
Proposti da Hoara e Brinch Hansen negli anni ‘70, possono essere implementati tramite i semafori
Sintassi:
monitor nome-monitor
{
dichiarazione di variabili condivise
procedure body P1(..)
{
..
}
procedure body P2(..)
{
..
}
procedure body Pn(..)
{
..
}
{
codice di inizializzazione
}
}
Un monitor è un modulo software che contiene una o più procedure, una sequenza di inizializzazione e dati locali
Caratteristiche:
Garantendo l’esecuzione di un solo processo alla volta un monitor può quindi essere utilizzato per la mutua esclusione
Un monitor deve contenere degli strumenti di sincronizzazione
Ad esempio si supponga che un processo chiami il monitor e che mentre è al suo interno sia sospeso finchè non si verifica una certa condizione
Necessario fare in modo che il processo sospeso rilasci il monitor in modo che altri processi possano entrare
Quando in seguito la condizione viene soddisfatta e il monitor è nuovamente disponibile il processo deve essere riattivato e deve poter rientrare nel monitor nello stesso punto in cui era stato sospeso
Un monitor fornisce la sincronizzazione mediante l’uso di variabili di condizione accessibili solo dall’interno del monitor
Un programmatore che deve scrivere un proprio schema di sincronizzazione può definire una o più variabili condizionali tramite il costrutto condition (ad esempio condition x, y;
)
Le uniche operazioni eseguibili su una variabile condition sono wait and signal: