Monitor

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

Variabili condition

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: