Programmazione Concorrente e Distribuita Linguaggi costrutti memoria comune
Programmazione Concorrente e Distribuita Linguaggi costrutti memoria comune PCD 2002/2003 Linguaggi e concorrenza. Esprimere la concorrenza
Programmazione Concorrente e Distribuita § Concurrent Pascal (75 -77) linguaggio soprattutto didattico tre tipi di moduli: processi classi monitor § Modula e Modula 2 (77 -82) linguaggio per applicazioni in tempo reale modulare creazione dinamica di processi monitor (interface module) coroutine PCD 2006 -2007 Linguaggi e concorrenza 2
Programmazione Concorrente e Distribuita § Mesa (77) linguaggio per pprogrammazione di sistemi creazione dinamica di processi (fork) coroutine monitor § Edison (83) linguaggio per applicazioni in tempo reale processi (cobegin/coend) regioni critiche condizionali PCD 2006 -2007 Linguaggi e concorrenza 3
Programmazione Concorrente e Distribuita Costrutti monitor in linguaggi di programmazione § Ada La programmazione dei monitor e’ semplificata con l’uso di oggetti protetti Si puo’ accedere ad un oggetto protetto sono eseguite tramite entry e procedure. Tutte saranno garantite in M. E. Non esistono condition ma barriere (del tipo when B) Le barriere si possono usare solo nelle entry Le barriere devono dipendere solo da variabili condivise I processi che si bloccano su una barriera vengono memorizzati in una coda FIFO (ricordando anche la condizione B) Il processo che lascia l’oggetto protetto testa la condizione dei processi bloccati PCD 2006 -2007 Linguaggi e concorrenza 4
Problema Lettori Scrittori in Ada con oggetti protected RW is entry Start. Read; procedure End. Read; entry Startwrite; procedure End. Write; private Readers: Natural : =0; Writing: Boolean : = false; end RW; protected body RW is entry Start. Read when not Writing is begin Readers : = Readers + 1; end Start. Read; PCD 2006 -2007 procedure End. Read is begin Readers : = Readers - 1; end End. Read; entry Start. Write when not Writing and Readers = 0 is begin Writing : = true; end Start. Write; procedure End. Write is begin Writing : = false; end End. Write; end RW; Linguaggi e concorrenza 5
Monitor in Java In Java non esiste un costrutto predefinito monitor ma e’ possibile costruire un oggetto analogo al costrutto monitor, utilizzando: § § metodi synchronized wait (blocca il processo rilasciando il lock) § notify (analogo allo statement signal del monitor) § notify. All (sveglia tutti I processi bloccati sul monitor) PCD 2006 -2007 Linguaggi e concorrenza 6
Monitor in Java class RWMonitor { volatile int readers = 0; volatile boolean writing = false; synchronized void Start. Read() { while (writing) try { wait(); } catch(Interrupted. Exception e) readers = readers + 1; notify. All(); } synchronized void End. Read() { readers = readers - 1; if (readers == 0) notify. All(); } PCD 2006 -2007 {} synchronized void Start. Write() { while(writing || (readers != 0)) try { wait(); }catch (Interrupted. Exception e) {} writing = true; } synchronized void End. Write() { writing = false; notify. All(); } } Linguaggi e concorrenza 7
- Slides: 7