1 Processi e Thread Meccanismi di IPC (2) Problemi classici di IPC
2 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)
3 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!
4 Monitor (3) Schema tipico di un monitor (CPascal-like)
5 Monitor (4) Produttore/Consumatore
6 Monitor (5) Non ci sono problemi di interferenza!
7 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
8
9 Soluzione per Produttore/Consumatore in Java (parte 2)