PCD2.07

annuncio pubblicitario
Programmazione Concorrente e
Distribuita
Linguaggi costrutti memoria
comune
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. 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 protetti
protected RW is
entry StartRead;
procedure EndRead;
entry Startwrite;
procedure EndWrite;
private
Readers: Natural :=0;
Writing: Boolean := false;
end RW;
protected body RW is
entry StartRead
when not Writing is
begin
Readers := Readers + 1;
end StartRead;
PCD 2006-2007
procedure EndRead is
begin
Readers := Readers - 1;
end EndRead;
entry StartWrite
when not Writing and Readers = 0 is
begin
Writing := true;
end StartWrite;
procedure EndWrite is
begin
Writing := false;
end EndWrite;
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)

notifyAll (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 StartRead() {
while (writing)
try {
wait();
} catch(InterruptedException e)
readers = readers + 1;
notifyAll();
}
synchronized void EndRead() {
readers = readers - 1;
if (readers == 0) notifyAll();
}
PCD 2006-2007
synchronized void StartWrite() {
while(writing || (readers != 0))
try {
wait();
}catch (InterruptedException e) {}
writing = true;
}
{}
synchronized void EndWrite() {
writing = false;
notifyAll();
}
}
Linguaggi e concorrenza
7
Scarica