programmazione concorrente e distribuita linguaggi costrutti memoria comune
TRANSCRIPT
![Page 1: Programmazione Concorrente e Distribuita Linguaggi costrutti memoria comune](https://reader036.vdocuments.pub/reader036/viewer/2022082920/5542eb76497959361e8e05ed/html5/thumbnails/1.jpg)
Programmazione Concorrente e Programmazione Concorrente e DistribuitaDistribuita
Linguaggi costrutti memoria comune
![Page 2: Programmazione Concorrente e Distribuita Linguaggi costrutti memoria comune](https://reader036.vdocuments.pub/reader036/viewer/2022082920/5542eb76497959361e8e05ed/html5/thumbnails/2.jpg)
PCD 2006-2007 Linguaggi e concorrenza 2
Programmazione Concorrente e Distribuita
Concurrent Pascal Concurrent Pascal (75-77)(75-77)linguaggio soprattutto didatticotre tipi di moduli:
processiclassimonitor
Modula e Modula 2 Modula e Modula 2 (77-82)(77-82)linguaggio per applicazioni in tempo reale
modularecreazione dinamica di processimonitor (interface module)coroutine
![Page 3: Programmazione Concorrente e Distribuita Linguaggi costrutti memoria comune](https://reader036.vdocuments.pub/reader036/viewer/2022082920/5542eb76497959361e8e05ed/html5/thumbnails/3.jpg)
PCD 2006-2007 Linguaggi e concorrenza 3
Programmazione Concorrente e Distribuita
Mesa Mesa (77)(77)linguaggio per pprogrammazione di sistemi
creazione dinamica di processi (fork)coroutine
monitor
Edison Edison (83)(83)
linguaggio per applicazioni in tempo realeprocessi (cobegin/coend)regioni critiche condizionali
![Page 4: Programmazione Concorrente e Distribuita Linguaggi costrutti memoria comune](https://reader036.vdocuments.pub/reader036/viewer/2022082920/5542eb76497959361e8e05ed/html5/thumbnails/4.jpg)
PCD 2006-2007 Linguaggi e concorrenza 4
Programmazione Concorrente e Distribuita
Costrutti monitor in linguaggi di programmazione
AdaAdaLa 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 entryLe barriere devono dipendere solo da variabili condiviseI 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
![Page 5: Programmazione Concorrente e Distribuita Linguaggi costrutti memoria comune](https://reader036.vdocuments.pub/reader036/viewer/2022082920/5542eb76497959361e8e05ed/html5/thumbnails/5.jpg)
PCD 2006-2007 Linguaggi e concorrenza 5
Problema Lettori Scrittori in Ada Problema Lettori Scrittori in Ada con oggetti protetticon oggetti protetti
protectedprotected RW RW isis entryentry StartRead; StartRead; procedureprocedure EndRead; EndRead; entryentry Startwrite; Startwrite; procedureprocedure EndWrite; EndWrite;privateprivate Readers: Natural :=0;Readers: Natural :=0; Writing: Boolean := false;Writing: Boolean := false;end end RW;RW;
protected bodyprotected body RW is RW is entryentry StartRead StartRead when notwhen not Writing Writing isis beginbegin Readers := Readers + 1;Readers := Readers + 1; endend StartRead; StartRead;
procedureprocedure EndRead EndRead isis
beginbegin
Readers := Readers - 1;Readers := Readers - 1;
endend EndRead; EndRead;
entryentry StartWrite StartWrite
when notwhen not Writing Writing andand Readers = 0 Readers = 0 isis
beginbegin
Writing := true;Writing := true;
endend StartWrite; StartWrite;
procedureprocedure EndWrite EndWrite isis
beginbegin
Writing := false;Writing := false;
endend EndWrite; EndWrite;
endend RW; RW;
![Page 6: Programmazione Concorrente e Distribuita Linguaggi costrutti memoria comune](https://reader036.vdocuments.pub/reader036/viewer/2022082920/5542eb76497959361e8e05ed/html5/thumbnails/6.jpg)
PCD 2006-2007 Linguaggi e concorrenza 6
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)
![Page 7: Programmazione Concorrente e Distribuita Linguaggi costrutti memoria comune](https://reader036.vdocuments.pub/reader036/viewer/2022082920/5542eb76497959361e8e05ed/html5/thumbnails/7.jpg)
PCD 2006-2007 Linguaggi e concorrenza 7
Monitor in Java
classclass RWMonitor { RWMonitor { volatile intvolatile int readers = 0; readers = 0; volatile booleanvolatile boolean writing = false; writing = false;
synchronized voidsynchronized void StartRead() { StartRead() { whilewhile (writing) (writing) trytry { { waiwaitt();(); } } catchcatch(InterruptedException e) {}(InterruptedException e) {} readers = readers + 1;readers = readers + 1; notifyAll();notifyAll(); }}synchronized voidsynchronized void EndRead() { EndRead() { readers = readers - 1;readers = readers - 1; ifif (readers == 0) notifyAll(); (readers == 0) notifyAll(); }}
synchronized voidsynchronized void StartWrite() { StartWrite() {
whilewhile(writing || (readers != 0))(writing || (readers != 0))
trytry { {
wait();wait();
}}catchcatch (InterruptedException e) {} (InterruptedException e) {}
writing = true;writing = true;
}}
synchronized voidsynchronized void EndWrite() { EndWrite() {
writing = false;writing = false;
notifyAll();notifyAll();
}}
}}