Java: programmazione concorrente con condivisione di memoria

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Meccanismi di IPC Problemi classici di IPC
Java Stream e File.
Java Stream e File. La classe File Per operare con lintero file java mette a disposizione la classe File Per utilizzare la classe File è necessario importare.
Recupero debito quarto anno Primo incontro
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
Algoritmi e Programmazione
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Semantica Operazionale di un frammento di Java: lo stato.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 4 Aprile 2008 ECCEZIONI. Eccezioni Come si definiscono eccezioni Come si lanciano Come si gestiscono (gestione esplicita o di default)
MultiSet, Liste Ordinate
Le gerarchie di tipi.
Esercitazione Frame. Argomento Realizzazione di un tipo di dato astratto Usare le eccezioni per segnalare situazioni particolari Invariante e funzione.
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
1 Processi e Thread Meccanismi di IPC (1). 2 Comunicazioni fra processi/thread Processi/thread eseguiti concorrentemente hanno bisogno di interagire per.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
Programmazione Concorrente
2 luglio 2006URM2 – ING- OOP0304 OL G. Cantone e A. Lomartire 1 Programmazione Orientata agli Oggetti Processi, task e thread Java (ed esempi) Università
Eccezioni Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
eliana minicozzi linguaggi1a.a lezione2
Overriding.
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 1 Programmi concorrenti: quanto è lungo un millisecondo? In un normale personal computer.
Approfondimento delle classi
AA2003/04 © M.A. Alberti Programmazione Interfacce 1 Programmazione Corso di laurea in Informatica.
© CEFRIEL Concorrenza (cenni) Docente: Gabriele Lombardi
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Sincronizzazione fra thread
Sistemi Operativi GESTIONE DEI PROCESSI.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
Corso di PHP.
Concorrenza e Sincronizzazione di Thread e Processi
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Introduzione alla programmazione Object Oriented
CdL Ingegneria Elettronica, Telecomunicazioni ed Automazione Fondamenti di Informatica LB A.A /02/2008 Alessandra Toninelli
Processi e Thread Job: Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle e.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
Corso di “Programmazione a oggetti” Programmazione concorrente
Programmazione concorrente
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA FINALE DEL 21 MAGGIO 2007 NOME: COGNOME: ________________________________________________________________________________.
Sincronizzazione dei processi
Concorrenza 1 Conto corrente Nella famiglia Giambietti non ci sono grossi problemi economici. Infatti il padre, Enea, di professione artista free-lance,
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
I processi.
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Programmazione Concorrente e Distribuita
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 Eccezioni in Java. 2 Ricordiamo che 4 una procedura può terminare –normalmente, ritornando un risultato –in modo eccezionale ci possono essere diverse.
Gestione dei thread in Java
1 Processi e Thread Meccanismi di IPC (2) Problemi classici di IPC.
Informatica Lezione 8 Scienze e tecniche psicologiche dello sviluppo e dell'educazione Anno accademico:
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
1 Elementi di programmazione concorrente in Java: i threads.
Classi ed Oggetti in Java (Cenni). Richiami Cenni sull’ Implementazione, Macchine Astratte, Compilatore, Interprete Ruolo delle Classi in Java Oggetti.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
Esercitazione del 9 marzo 2007 Ereditarieta’. Richiami Definire sottoclassi (ereditarieta’) Overriding Specificatori di accesso (private, protected) Principio.
Stringhe In linguaggio C. Stringhe  Un insieme di caratteri in sequenza forma una stringa.  Alcuni linguaggi definiscono per le stringhe uno specifico.
Priorità e Sincronizzazione tra Threads. Priorità e preemption Java non garantisce la preemption Lo scheduling avviene in base all’algortimo Highest Priority.
Corso di Algoritmi e Strutture Dati con Laboratorio Richiami di Java – parte II.
1 Competizione e cooperazione pag. 88 Cap.3 - Esecuzione concorrente di processi 1.
Laboratorio di Ingegneria del Software Laboratorio di Ingegneria del Software Primo Incontro Titolare Prof. Pierluigi Sanpietro.
Transcript della presentazione:

Java: programmazione concorrente con condivisione di memoria Problemi di correttezza dovuti all’accesso concorrente di più processi ad una stessa area di memoria.Si pensi a tutte le situazioni in cui l’aggiornamento di un dato dipende dal suo valore Esempio del conto corrente bancario: Se ho i soldi posso fare il prelievo. Se pero` consento a più persone (processi) cointestatarie del conto l’accesso ai dati rischio di andare in rosso!

Caratteristiche di Java per scrivere programmi concorrenti Possibilità di generare processi usando la Classe Thread. Ogni oggetto ha un lock questo permette di rendere sequenziale l’esecuzione dei metodi di un qualunque oggetto: descrittore synchronized metodi wait e notify della classe Object.

La classe Thread La classe Thread di Java fa parte della libreria Lang (import java.lang.*;); è una sottoclasse di Object ; implementa l’interfaccia Runnable (un’interfaccia che ha un unico metodo: il metodo run); ha diversi costruttori (ne vedremo alcuni) molti metodi (ne vedremo solo alcuni tra cui il metodo run)

Per usare i Thread ci sono due possibilità Definire una classe che estende Thread e ridefinire il metodo run Definire una classe, implementazione dell’interfaccia Runnable, per cui si definisce il metodo run ed costruire un Thread passandogli tale un oggetto di tale classe. La seconda soluzione permette di definire la classe anche come sottoclasse di qualche altra classe.

Costruttori Thread() crea un nuovo Thread Thread(Runnable target) crea un nuovo Thread, passando come argomento un oggetto Runnable il cui run verrà invocato dal metodo run del thread Thread(String name) crea un nuovo Thread, con nome name Thread(Runnable target, String name) come i due precedenti

Metodi principali getName() restituisce il nome del thread join() aspetta che il thread termini run() se il thread è costruito passando un oggetto Runnable invoca il run di tale oggetto altrimenti non fa nulla start() manda il thread in esecuzione causando l’invocazione del metodo run sleep (long t) isAlive(), metodo boolean che testa se il thread è vivo

Conto corrente Scrivere un programma che gestisca un conto corrente bancario con operazioni di saldo, versamento e prelievo, si richiede che il conto l’ammontare del conto non sia mai negativo. Si simuli un’interazione di utenti cointestatari del conto che simultaneamente richiedono operazioni di prelievo, e saldo.

Classe Object Ogni oggetto ha un lock, cioè una variabile booleana, Ogni metodo può essere dichiarato synchronized. Quando un thread cerca di eseguire un metodo dichiarato synchronized si possono verificare due casi: il lock dell’oggetto è disponibile, in questo caso il thread acquisisce il lock esegue il metodo e rilascia il lock, il lock dell’oggetto non è disponibile, in questo caso il thread viene messo in attesa, che il lock si liberi.

Problema del buffer Scrivere un programma che gestisca un buffer che contiene un valore intero, con due processi il produttore che scrive valori nel buffer e il consumatore che legge valori dal buffer. Si richiede che non ci sia perdita di valori, ogni valore scritto deve essere letto. La soluzione usa una variabile booleana che indica se il valore memorizzato nel buffer è stato letto dal consumatore o no. Le operazioni di get e put testano la variabile prima di restituire il valore o di modificarlo.

Metodi wait e notify Per gestire alcune situazioni complesse la classe object ha i seguenti metodi, che possono essere invocati dentro un metodo synchronized: il metodo wait che mette il thread in attesa di una notify, rilasciando il lock, notify() e notifyAll() che segnalano ad eventuali thread in attesa (che abbiano cioè eseguito una wait) il verificarsi di una condizione,

Monitor La classe cella nell’esempio definita per la soluzione del problema del buffer è un monitor: Un monitor è tipo di dato astratto, cioè un oggetto in cui l’accesso ai dati avviene attraverso i suoi metodi e i metodi sono sincronizzati.

Annidamento di metodi sincronizzati Che succede se in un metodo synchronized invoco un altro metodo syncronized, dello stesso oggetto? Genero un dead lock? Tutto funziona correttamente? Vediamo un esempio: il programma del Conto corrente in cui il prelievo invoca il saldo.

Proprietà dei programmi concorrenti I programmi concorrenti devono godere delle seguenti proprietà: Correttezza dei dati, l’esecuzione concorrente di processi che operano sugli stessi dati non deve generare inconsistenze. Non generano deadlock, un deadlock è una situazione in cui il programma concorrente non termina perchè i processi che lo costituiscono aspettano una condizione che non si verificherà mai.