Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Programmazione Concorrente e Distribuita
Linguaggi costrutti memoria comune
2
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 Linguaggi e concorrenza
3
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 Linguaggi e concorrenza
4
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 Linguaggi e concorrenza
5
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; procedure EndRead is begin Readers := Readers - 1; end EndRead; entry StartWrite when not Writing and Readers = 0 is Writing := true; end StartWrite; procedure EndWrite is Writing := false; end EndWrite; end RW; PCD Linguaggi e concorrenza
6
Linguaggi e concorrenza
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 Linguaggi e concorrenza
7
Linguaggi e concorrenza
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(); synchronized void StartWrite() { while(writing || (readers != 0)) try { wait(); }catch (InterruptedException e) {} writing = true; } synchronized void EndWrite() { writing = false; notifyAll(); PCD Linguaggi e concorrenza
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.