Processi e Thread
Meccanismi di IPC (2)
Problemi classici di IPC
1
Monitor (1)
• Oggetti
– Strutture dati + metodi per accedervi (procedure)
• Concurrent Pascal
• Mutua esclusione nell’esecuzione delle procedure
• Variabili di Condizione
– manipolabili solo con wait() e signal()
– non contano gli eventi
– sono associate ad una coda di processi in attesa
• wait(X), X variabile di condizione
– sospende sempre il processo che la invoca in attesa di una
signal(X)
2
Monitor (2)
• signal(X)
– sveglia uno dei processi in coda su X
– se nessun processo è in attesa, va persa
– deve essere eseguita solo come ultima istruzione prima di
uscire dal monitor (il processo svegliato ha l’uso esclusivo del
monitor)
• Il monitor è un costrutto linguistico !!
– Il compilatore si occupa di generare codice opportuno per
realizzare la sincronizzazione
– L’implementazione si basa su meccanismi di IPC a più basso
livello (es. semafori …)
– Non può essere aggiunto a un linguaggio con una libreria di SC
opportune!
3
Monitor (3)
Schema tipico di un monitor (CPascal-like)
4
Monitor (4)
Produttore/Consumatore
5
Monitor (5)
Non ci sono problemi di interferenza!
6
Monitor (6)
• Java fornisce i monitor
– thread user-level
– ME nell’esecuzione dei metodi synchronized di una
stessa classe
– non ci sono variabili di condizione
– wait(), notify() simili a sleep() , wakeup()
– è possibile svegliare tutti i processi in attesa
• Vediamo di nuovo il problema del produttore e
del consumatore
7
8
Soluzione per Produttore/Consumatore in Java (parte 2)
9
Scarica

Lucidi(IPC-2)