1 / 18

Corso di “Programmazione a oggetti” Programmazione concorrente

Corso di “Programmazione a oggetti” Programmazione concorrente. Costrutti e meccanismi di alto livello a supporto della programmazione concorrente in ambiente globale Tipi di Monitor. exit && m.look() ==NULL /m.cont=1;. m.cont==0;. ATTESA MUTEX m (1). ATTIVO P.

Download Presentation

Corso di “Programmazione a oggetti” Programmazione concorrente

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Corso di “Programmazione a oggetti”Programmazione concorrente Costrutti e meccanismi di alto livello a supporto della programmazione concorrente in ambiente globale Tipi di Monitor 2.2.3.2 G. Cantone

  2. exit&& m.look() ==NULL /m.cont=1; m.cont==0; ATTESA MUTEX m (1) ATTIVO P exit&& P=m.look()!=NULL / P==m.get(); exit enter m.cont==1 /m.cont=0; Precondizione /Postcondizione Monitor Regione 2.2.3.2 G. Cantone

  3. c1.signal Monitor Regione Critica Condizionale ATTESA SYNC s BLOCCATO COND c1 c1.signal/while (c1.cont>0 ){m.put(c1.get()); c1.cont--;} cl.wait m.cont==0; c1.wait ATTESA MUTEX m(1) ATTIVO P enter exit (exit || wait ) &&m.look() !=NULL/ P==m.get(); enter&&m.cont==1; Molte postcondizioni non riportate 2.2.3.2 G. Cantone

  4. Monitor tipo Regione Critica Condizionale Un processo già in attesa su condizione, una volta passato in esecuzione, dovrà valutare nuovamente la condizione di avanzamento (un altro processo, già in attesa sul semaforo di ingresso o ivi ricollocato, entrando per primo nel monitor, potrebbe alterare lo stato del monitor medesimo): while(!<B>) cond.wait; 2.2.3.2 G. Cantone

  5. Monitor Java: notifyAll() Corrisponde a un monitor tipo Regione Critica Condizionale con un solo stato di attesa. Vi è un’unica condizione di attesa, implicita. È una classe Java che include almeno un metodo synchronized. Tutti metodi synchronized operano in mutua esclusione. Con il segnalamento notifyAll(),TUTTI i processi in attesa vengono rimessi in ingresso del monitor. 2.2.3.2 G. Cantone

  6. Monitor/Implementazione/Casi reali Monitor Java notifyAll BLOCCATO Attesa interna ai notifyAll/while (ai.cont>0 ){m.put(ai.get()); ai.cont--;} wait c.notifyAll m.cont==0; ATTESA MUTEX m(1) ATTIVO P enter synchronized exit (exit || wait ) &&m.look() !=NULL/ P==m.get(); enter&&m.cont==1; Molte postcondizioni non riportate 2.2.3.2 G. Cantone

  7. Monitor Java Con il segnalamento notify(),UN processo, scelto a caso fra quelli eventualmente in attesa, viene rimesso in ingresso del monitor. 2.2.3.2 G. Cantone

  8. Monitor Java: notify() BLOCCATO Attesa interna ai notify/ai.cont>0 =>{m.put(ai.get()); ai.cont--;} wait c.notify m.cont==0; ATTESA MUTEX m(1) ATTIVO P enter synchronized exit (exit || wait ) &&m.look() !=NULL/ P==m.get(); enter&&m.cont==1; Molte postcondizioni non riportate 2.2.3.2 G. Cantone

  9. Variante Monitor MRCC È una variante del precedente MRCC. Se il processo attivo si sospende, allora libera il monitor. Un processo attivo può risvegliare un qualunque numero di processi i quali però sono forzati ad abbandonare il monitor, il cui controllo resta al processo segnalante. L’uscita forzata potrebbe creare problemi, in quanto i processi forzati a uscire non potrebbero disporre dei giusti valori dei dati. 2.2.3.2 G. Cantone

  10. c.signal Variante Monitor RCC BLOCCATO C c.signal/if (c.cont>0 ){m.put(c.get()); c.cont--;} wait m.cont==0; ATTESA MUTEX m(1) ATTIVO P enter synchronized exit (exit || wait ) &&m.look() !=NULL/ P==m.get(); enter&&m.cont==1; Molte postcondizioni non riportate 2.2.3.2 G. Cantone

  11. Ulteriori tipi di monitor Aspetti comuni I processi in attesa su coda interna sono, in termini di risveglio, privilegiati rispetto a quelli in attesa all’esterno. 2.2.3.2 G. Cantone

  12. Monitor Monitore Modificata 9.07.2006 ATTESA COND c(0) Come necessario per programma BLOCCATO Cond c(0) ! a c.wait m.cont==0; c.signal&&c.cont>0; ATTESA MUTEX m(1) ATTIVO P enter c.signal || exit a: (exit || c.wait || (c.signal&& c.cont==0)) &&m.look() !=NULL/ P==m.get(); enter&&m.cont==1;/m.cont=0; Molte postcondizioni non riportate 2.2.3.2 G. Cantone

  13. Monitor/Casi reali Monitor di Hoare Monitor Hansen Simili al Monitore. Impiegano Condition e uniQueue rispettivamente 2.2.3.2 G. Cantone

  14. Monitor/Implementazione/Casi reali Monitor Concurrent Pascal ATTESA QUEUE q(0) 0..MAXP-1 BLOCCATO QUEUE q(0) ! a q.delay m.cont==0; q.continue&&q.queue; ATTESA MUTEX m(1) ATTIVO P enter continue || exit a: (exit || delay || (q.continue&& !q.queue)) &&m.look() !=NULL/ P==m.get(); enter&&m.cont==1; Molte postcondizioni non riportate 2.2.3.2 G. Cantone

  15. Altri monitor/Aspetti Comuni Una C.signal() NON comporta l’abbandono dello stato ATTIVO. Ciò perché il processo segnalato potrebbe portare il monitor in uno stato diverso da quello lasciato dal processo che emette il segnale e, per questo, inconsistente per lo stesso. 2.2.3.2 G. Cantone

  16. Monitor Mediatore ATTESA COND c(0) BLOCCATO Cond c(0) Come necessario per programma c.wait c.signal && c.cont==0 m.cont==0; c.signal&&c.cont>0; ATTESA MUTEX m(1) (exit || c.wait)&&u.cont==0 && m.look() !=NULL /P==m.get(); ATTIVO P enter exit( exit c.signal && c.cont>0 PENDENTE URGENTE u(0) (exit || c.wait)&& u.cont>0 enter&&m.cont==1; Molte postcondizioni non riportate 2.2.3.2 G. Cantone

  17. Monitor/Implementazione/Avanzamento-sospensione Monitor Gladiatore ATTESA ELIGIBILI e Come necessario per programma ATTESA COND c c.signal && c.cont>0 BLOCCATO Cond c(0) c.wait c.signal ((exit || c.wait )&& e.cont>0) / P== e.get() m.cont==0; ATTESA MUTEX m ((exit || c.wait) &&e.cont==0) && m.look()!=NULL / P==m.get() ATTIVO P enter exit enter &&m.cont==1;/m.cont=0; Molte postcondizioni non riportate 2.2.3.2 G. Cantone

  18. Monitor/ICasi reali Monitor Mesa ATTESA ELEGIBILI e(0) Come necessario per programma ATTESA COND c c.notify && c.cont>0 BLOCCATO Cond c(0) c.wait c.notify ((exit || c.wait )&& e.cont>0) / P== e.get() m.cont==0; ATTESA MUTEX m(1) ((exit || c.wait) &&e.cont==0) && m.look()!=NULL / P==m.get() ATTIVO P enter exit enter &&m.cont==1; Molte postcondizioni non riportate 2.2.3.2 G. Cantone

More Related