Multithreading in Java

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Multithreading in Java"

Transcript

1 Multithreading in Java

2 Un programma sequenziale (single thread) class ABC {. public void main(..) {.. begin body end 2

3 Un programmamultithreaded Main Thread start start start Thread A Thread B Thread C (le thread possono scambiare dati) 3

4 Applicazioniweb/Internet Servono molti utenti simultaneamente PC client Internet Server Local Area Network PDA 4

5 Server multithreaded Servono diversi Client concorrentemente Client 1 Process Server Process Internet Server Threads Client 2 Process 5

6 Applicazioni moderne necessitano multithreading Editing e Printing di documenti in background. Printing Thread Editing Thread 6

7 Copiadifile multithreaded/parallela reader() { lock(buff[i]); read(src,buff[i]); unlock(buff[i]); buff[0] buff[1] writer() { lock(buff[i]); write(src,buff[i]); unlock(buff[i]); Cooperative Parallel Synchronized Threads 7

8 Processo ha risorse di computazione proprie ad es. ha il proprio spazio di memoria Sinonimo di programma/applicazione in esecuzione Tuttavia, ciò che è percepito dall utente come una singola applicazione spesso è il frutto dell attività di vari processi che cooperano la maggior parte delle implementazioni della JVM girano come un singolo processo

9 Thread processo leggero (lightweight) sia i processi che le thread forniscono un ambiente di esecuzione (del codice) creare una nuova thread richiede meno risorse che creare un processo ogni thread esiste nell ambito di un processo (e ogni processo ha almeno una thread di esecuzione) le thread di uno stesso processo condividono le risorse del processo (comunicazione tra thread più efficiente)

10 Processisingle/multi-threaded single-threaded threads di esecuzione multithreaded Flusso di istruzioni singolo Spazio degli indirizzi (memoria) comune Flusso di istruzioni multiplo 10

11 Ancorasu thread Una thread può essere vista come un pezzo di codice in esecuzione concorrentemente con altre thread Ogni thread consiste nell esecuzione di un sequenza di istruzioni ordinate staticamente (computazione sequenziale) Le thread sono usate per esprimere la concorrenza sia su macchine con processore singolo che multiplo L attività di programmazione con thread multiple è detto multithreading o multithreaded programming 11

12 Threade Java il multithreading è una caratteristica essenziale di Java ogni programma Java ha una main thread da cui possono essere generate altre thread la JVM esegue anche delle thread di sistema insieme al programma utente gestione della memoria trattamento dei segnali

13 Thread e Java Java supporta il multithreading fornendo primitive per: creazione di thread sincronizzazione thread scheduling comunicazione tra thread il Java Garbage Collector è eseguito come una thread a bassa priorità Il concetto di thread in Java è catturato dalla classe Thread 13

14 Classe Thread definisce una serie di metodi per la gestione delle thread implementa l interfaccia Runnable che richiede un metodo run (firma public void run()) il metodo run rappresenta il main della thread corrispondente run della classe Thread non fa nulla per programmare una thread occorre fornire una implementazione di run esistono due modi 14

15 Programmazionedi una thread estensione della classethread con riscrittura di run istanziazione di Thread fornendo un oggetto Runnable 15

16 Estensionedellaclasse Thread public class MyThread extends Thread { public void run() { // thread body of execution istanzia una thread: MyThread thr1 = new MyThread(); avvia l esecuzione della thread: thr1.start(); 16

17 Esempio public class MyThread extends Thread { // la thread public void run() { System.out.println(" questa thread è in esecuzione... "); // end class MyThread public class ThreadEx1 { // un programa che istanzia MyThread public static void main(string [] args ) { MyThread t = new MyThread(); // l invocazione di start(), invocherà a sua volta run(). t.start(); // end main() // end class ThreadEx1 17

18 Attraverso un oggetto Runnable public class MyThread implements Runnable {... public void run() { // thread body of execution istanzia oggetto: MyThread myobject = new MyThread(); istanzia una thread che si comporta come specificato da myobject: Thread thr1 = new Thread( myobject ); avvia esecuzione: thr1.start(); 18

19 Esempio public class MyThread implements Runnable { public void run() { System.out.println(" questa thread è in esecuzione... "); // end class MyThread public class ThreadEx2 { public static void main(string [] args ) { Thread t = new Thread(new MyThread()); t.start(); // end main() // end class ThreadEx2 19

20 Esecuzioni di programmi multithreaded l ordine in cui vengono eseguite le istruzioni di ogni thread nei processori non prevedibile in assenza di sincronizzazioni sono possibili tutti gli interleaving delle esecuzioni di ciascuna thread successive esecuzioni possono dar luogo a comportamenti differenti 20

21 Esempio public class Conta implements Runnable{ public Conta(int x){up = x; public void run(){ threadmessage("start!"); for (int i=0; i<up;i++) threadmessage(""+(1+i)); threadmessage("finish!"); //Display a message, preceded by the name of the current thread static void threadmessage(string message) { String threadname = Thread.currentThread().getName(); System.out.println(threadName+ ": "+ message); private int up; 21

22 Esempio (tre threadconta) public class ContaTester { public static void main(string[] args) { Thread t1 = new Thread(new Conta(10)); Thread t2 = new Thread(new Conta(10)); Thread t3 = new Thread(new Conta(10)); t1.start(); t2.start(); t3.start(); 22

23 Un rundel programma Thread-1: Start! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-1: 5 Thread-0: Start! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-1: 6 Thread-2: Start! Thread-2: 1 Thread-2: 2 Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-0: 9 Thread-0: 10 Thread-0: Finish! Thread-1: 7 Thread-1: 8 Thread-1: 9 Thread-1: 10 Thread-1: Finish! 23

24 Altri run Thread-0: Start! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-1: Start! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-1: 5 Thread-2: Start! Thread-2: 1 Thread-1: 6 Thread-1: 7 Thread-1: 8 Thread-1: 9 Thread-1: 10 Thread-1: Finish! Thread-2: 2 Thread-0: 9 Thread-0: 10 Thread-0: Finish! Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-0: Start! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-0: 9 Thread-0: 10 Thread-1: Start! Thread-2: Start! Thread-2: 1 Thread-2: 2 Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-0: Finish! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-1: 5 Thread-1: 6 Thread-1: 7 Thread-1: 8 Thread-1: 9 Thread-1: 10 Thread-1: Finish! Thread-0: Start! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-0: 9 Thread-1: Start! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-1: 5 Thread-1: 6 Thread-1: 7 Thread-1: 8 Thread-0: 10 Thread-1: 9 Thread-0: Finish! Thread-1: 10 Thread-1: Finish! Thread-2: Start! Thread-2: 1 Thread-2: 2 Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-1: Start! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-0: Start! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-0: 9 Thread-0: 10 Thread-0: Finish! Thread-2: Start! Thread-1: 5 Thread-1: 6 Thread-1: 7 Thread-1: 8 Thread-1: 9 Thread-1: 10 Thread-1: Finish! Thread-2: 1 Thread-2: 2 Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-0: Start! Thread-1: Start! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-1: 5 Thread-1: 6 Thread-1: 7 Thread-1: 8 Thread-1: 9 Thread-1: 10 Thread-1: Finish! Thread-2: Start! Thread-2: 1 Thread-2: 2 Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-0: 9 Thread-0: 10 Thread-0: Finish! 24

25 Stati dell esecuzionedi una thread new start() blocked eseguibile non-eseguibile unblocked dead 25

26 Metodo sleep metodo static di Thread Thread.sleep(3000) causa la sospensione dell esecuzione della thread corrente per 3 secondi il periodo di pausa può essere terminato con un interrupt se un interrupt avviene mentre sleep è in esecuzione, sleep lancia l eccezione controllata InterruptedException (sottoclasse di Exception) 26

27 Metodi currentthreade join Thread.currentThread() restituisce il riferimento all oggetto Thread correntemente in esecuzione metodo static di Thread t.join() mette la thread in esecuzione in attesa fino a quando la thread t termina metodo non-static di Thread 27

28 Interrupts un interrupt può essere inviato da una thread per interrompere l attività di un altra thread athread.interrupt() invia un interrupt alla thread athread ( setta l interrupt status della thread) se l interrupt avviene mentre sono in esecuzione metodi come sleep o join, viene lanciata un eccezione altrimenti, si può testare se un interrupt è avvenuto con i metodi interrupted(): metodo static, azzera l interrupt status isinterrupted(): metodo predicativo, lascia inalterato l interrupt status 28

29 Esempio public class SimpleThreads { //Display a message, preceded by the name of the current thread static void threadmessage(string message) { String threadname = Thread.currentThread().getName(); System.out.println(threadName+ ": "+ message); private static class MessageLoop implements Runnable { public void run() { String importantinfo[] = { Primo", Secondo", Terzo", Quarto ; for (int i = 0; i < importantinfo.length; i++) { try {Thread.sleep(4000); //Pause for 4 seconds catch (InterruptedException e) {threadmessage("i wasn't done!"); finally { threadmessage(importantinfo[i]); //Print a message 29

30 Esempio public static void main(string args[]) throws InterruptedException { long patience = 1000*6; //Delay before we interrupt MessageLoop thread threadmessage("starting MessageLoop thread"); long starttime = System.currentTimeMillis(); Thread t = new Thread(new MessageLoop()); t.start(); threadmessage("waiting for MessageLoop thread to finish"); while (t.isalive()) { //loop until MessageLoop thread exits threadmessage("still waiting..."); t.join(1000); //Wait maximum of 1 second for MessageLoop thread to finish if (((System.currentTimeMillis() - starttime) > patience) && t.isalive()) { threadmessage("tired of waiting!"); t.interrupt(); t.join(); threadmessage("finally!"); 30

31 Esempio: output main: Starting MessageLoop thread main: Waiting for MessageLoop thread to finish main: Still waiting... main: Still waiting... main: Still waiting... main: Still waiting... Thread-0: Primo main: Still waiting... main: Still waiting... main: Tired of waiting! Thread-0: I wasn't done! Thread-0: Secondo Thread-0: Terzo Thread-0: Quarto main: Finally! 31

32 Priorità in Java, ogni thread ha una priorità che influenza l ordine in cui vengono schedulate le thread in esecuzione. se non viene settata diversamente le thread hanno una priorità di default (NORM_PRIORITY) e sono servite in ordine di richiesta (FIFO) la priorità di una thread t si può cambiare con il metodo setpriority(int) Valori di priorità predefinite della classe Thread: MIN_PRIORITY = 1, NORM_PRIORITY=5, MAX_PRIORITY=10 32

33 Comunicazione tra thread Accesso condiviso ai dati due o più thread accedono ad uno stesso oggetto Ad es. due thread che condividono un contatore due thread che richiedono di inviare l output su System.out due operazioni simultanee su uno stesso conto corrente 33

34 Esempio Classe che implementa un contatore con incremento, decremento e lettura valore: public class Counter { private int c = 0; public void increment() { c++; public void decrement() {if (c> 0) c--; public int value() { return c; 34

35 Possibili errori con dati condivisi Interferenza avviene quando due operazioni (in thread differenti) sullo stesso dato si interfogliano Ad es., thread A incrementa il counter e thread B lo decrementa (incremento e decremento di variabili richiedono più micro-istruzioni: recupera valore, esegui operazione, salva risultato) Possibile esecuzione: A legge c; B legge c; A incrementa c; B decrementa c; A salva risultato; B salva risultato. Errore: il risultato calcolato da A viene perso 35

36 Possibili errori con dati condivisi Inconsistenza della memoria Due thread hanno una visione differente di un dato condiviso Ad es. x è condivisa tra thread A e thread B ed è inizializzata a 0 A esegue x++ B esegue System.out.println(x) Quale valore deve assumere B per x? 0 o 1? Nessuna assunzione può essere fatta in assenza di sincronizzazione tra le attività di A e B 36

37 Sequenza temporale istruzioni E corretto assumere che: ogni istruzione che precede nel codice un istruzione del tipo t.start(), avviene prima di tutte le istruzioni della thread t ogni istruzione che segue nel codice un istruzione del tipo t.join(), avviene dopo tutte le istruzioni della thread t La sincronizzazione può essere usata per forzare un ordine di esecuzione tra istruzioni di thread concorrenti 37

38 Sincronizzazione In Java, è costruita attorno all acquisizione di monitor (o intrinsic lock o monitor lock) Ogni oggetto ha un monitor associato Una thread che necessita di un accesso esclusivo e consistente ad un membro di un oggetto acquisisce il suo monitor prima e lo rilascia quando ha terminato Fin tanto che una thread è in possesso di un monitor nessuna altra thread può acquisirlo 38

39 Metodi synchronized public synchronized void increment() { c++; dichiarare un metodo synchronized assicura un esecuzione atomica del metodo stesso (come se fosse un unica istruzione) l invocazione di un metodo synchronized in una thread comporta l implicita acquisizione del monitor del parametro implicito se il monitor non è disponibile allora la thread resta in attesa il monitor viene rilasciato automaticamente quando viene eseguito il return dal metodo 39

40 Metodi synchronized in caso di due esecuzioni concorrenti di metodi synchronized di uno stesso oggetto il codice non viene interfogliato viene eseguita prima una chiamata e poi l altra mentre una chiamata è attiva tutte le altre chiamate vengono messe in attesa synchronized non si usa con costruttori (non serve) con i metodi static comporta l acquisizione del monitor dell oggetto Class corrispondente alla classe risolve i problemi di interferenza e consistenza della memoria 40

41 Esempio public class Adder implements Runnable { private Counter counter; public Adder(Counter acounter) { counter = acounter; public void run() {counter.increment(); // end class Adder counter public class Stopper implements Runnable { private Counter counter; public Stopper (Counter acounter) { counter = acounter; public void run() {counter.decrement(); // end class Stopper 41

42 Esempio public class SharedCounterTester{ public static void main(string [] args ) { Counter counterobject = new Counter(); Thread t1 = new Thread(new Adder(counterObject)); Thread t2 = new Thread(new Stopper(counterObject)); Thread t3 = new Thread(new Stopper(counterObject)); t1.start(); t2.start(); t3.start(); try{t1.join(); t2.join(); t3.join(); catch(interruptedexception e){ System.out.println(counterObject.value()); // end main() il contatore può valere -1!!! 42

43 Esempio Il problema viene risolto con: public class Counter { private int c = 0; public void increment() { c++; public synchronized void decrement() { if (c>0) c--; public int value() { return c; 43

44 Istruzioni synchronized synchronized si può usare anche su istruzioni In questo caso bisogna specificare un oggetto su cui acquisire il monitor synchronized(this) { lastname = name; namecount++; richiede il monitor del parametro implicito blocca l esecuzione di altri metodi su questo oggetto Se ciò non è necessario, possiamo usare oggetti differenti solo per scopi di sincronizzazione 44

45 Oggetti usati come monitor public class MsLunch { private long c1 = 0, c2 = 0; private Object lock1 = new Object(); private Object lock2 = new Object(); public void inc1() { synchronized(lock1) { c1++; public void inc2() { synchronized(lock2) { c2++; Gli incrementi di c1 e c2 possono essere interfogliati ma non possiamo interfogliare due incrementi della stessa variabile 45

46 Acquisizione multipla di un monitor Una thread non può acquisire un monitor posseduto da un altra thread ma può riacquisire un monitor che già possiede Viene consentito per evitare che una thread possa bloccare se stessa un codice sincronizzato invoca un metodo che contiene altro codice sincronizzato con lo stesso monitor 46

47 Accesso atomic Un azione è atomic se viene percepita come un tutt uno (come un un unica istruzione elementare) viene eseguita completamente senza interruzione o non viene eseguita c++ non è atomic Accesso atomic (lettura/scrittura) garantito su variabili dichiarate volatile variabili con riferimenti a oggetti variabili di tipo primitivo esclusi long e double Usare accessi atomic è più efficiente che usare synchronized (non usa monitor) 47

48 Metodo wait metodo di Object obj.wait(10000) all interno del codice di una thread T causa la sospensione dell esecuzione di T finché: sono trascorsi 10 secondi o un altra thread invoca notify() su obj e T viene scelta come thread da svegliare o un altra thread invoca notifyall() su obj o un altra thread invia un interrupt su T se si usa wait() oppure wait(0) non c è timeout 48

49 Metodo wait per invocare wait su obj una thread deve possedere il monitor di obj il monitor viene rilasciato subito dopo che la thread sospende l esecuzione altrimenti viene sollevata una IllegalMonitorStateException (eccezione non controllata) invocare wait all interno di un metodo synchronized è un modo semplice per ottenere il monitor del parametro implicito se un interrupt avviene mentre wait è in esecuzione, wait lancia l eccezione controllata InterruptedException (sottoclasse di Exception) 49

50 notifyalle notify notifyall sveglia tutte le thread in attesa sull oggetto su cui è invocato notify sveglia una thread in attesa sull oggetto su cui è invocato se ci sono più thread in attesa la scelta è arbitraria e dipende dall implementazione è utile solo quando si eseguono molte thread dello stesso tipo e quindi non importa seguire un ordine per entrambi i metodi è necessario acquisire prima il monitor dell oggetto su cui vengono invocati 50

51 Esempio: producer-consumerpattern una thread producer (produce dati) e una thread consumer (consuma dati) le thread comunicano attraverso un oggetto condiviso Requisiti da rispettare il consumer non deve provare a prendere il dato prima che il producer lo rilasci il producer non deve rilasciare un nuovo dato prima che il consumer prenda il precedente 51

52 Esempio: oggetto condiviso public class Drop { private String message; //from producer to consumer private boolean empty = true; // true means no new message public synchronized String take() { //wait until message is available. while (empty) { try { wait(); catch (InterruptedException e) { empty = true; //toggle status notifyall(); //notify producer that status has changed return message; public synchronized void put(string message) { //wait until message has been retrieved while (!empty) { try { wait(); catch (InterruptedException e) { empty = false; this.message = message; notifyall(); 52

53 Esempio: producer import java.util.random; public class Producer implements Runnable { private Drop drop; public Producer(Drop drop) { this.drop = drop; public void run() { String importantinfo[ ] = { "Mares eat oats", "Does eat oats", "Little lambs eat ivy", "A kid will eat ivy too" ; Random random = new Random(); for (int i = 0; i < importantinfo.length; i++) { drop.put(importantinfo[i]); try { Thread.sleep(random.nextInt(5000)); catch (InterruptedException e) { drop.put("done"); 53

54 Esempio: Consumer import java.util.random; public class Consumer implements Runnable { private Drop drop; public Consumer(Drop drop) { this.drop = drop; public void run() { Random random = new Random(); String message; while(!(message = drop.take()).equals("done")) { System.out.println("MESSAGE: "+ message); try { Thread.sleep(random.nextInt(5000)); catch (InterruptedException e) { 54

55 Esempio: classe tester public class ProducerConsumerExample { public static void main(string[] args) { Drop drop = new Drop(); (new Thread(new Producer(drop))).start(); (new Thread(new Consumer(drop))).start(); 55

56 Osservazioni non bisogna abusare nell uso di synchronized la sincronizzazione sequenzializza il codice opposto di parallelismo la sincronizzazione può ostacolare o fin anche bloccare la computazione (liveness) thread che sono in attesa reciproca (deadlock) thread che non riescono ad accedere frequentemente a risorse (starvation) thread che tentano di sincronizzarsi senza riuscirci (livelock) 56

57 Sincronizzazione: problemi Deadlock due o più thread si bloccano a vicenda viene invocato un metodo synchronized su un oggetto su cui l altra thread ha in esecuzione un metodo synchronized e viceversa Starvation una thread non riesce ad accedere ad una risorsa regolarmente un metodo synchronized di un oggetto impiega molto tempo e una thread lo invoca spesso. Altre thread che richiedono accesso ad un metodo synchronized dello stesso oggetto possono essere bloccate 57

58 Sincronizzazione: problemi Livelock due thread che agiscono una in risposta all azione dell altra due persone che vogliono attraversare contemporaneamente una strettoia. Una si fa a destra e l altra a sinistra ma non riescono a passare. Quindi la prima si sposta ora a sinistra e la seconda in risposta si sposta a destra, e così via. 58

59 Oggetti immutabili e concorrenza oggetti immutabili sono molto utili nei programmi concorrenti non possono cambiare stato, quindi nessuna interferenza tra thread inconsistenza della memoria oggetti mutabili vs. oggetti immutabili cambio di valore vs. nuovo oggetto istanziare oggetti non è un operazione particolarmente onerosa costo è compensato da una più efficiente garbage collection e dall eliminazione del codice per evitare inconsistenze per gli oggetti immutabili 59

60 Classe SynchronizedRGB(1) public class SynchronizedRGB { private int red, green, blue; //Values must be between 0 and 255 private String name; private void check(int red, int green, int blue) { if (red < 0 red > 255 green < 0 green > 255 blue < 0 blue > 255) { throw new IllegalArgumentException(); public SynchronizedRGB(int red, int green, int blue, String name) { check(red, green, blue); this.red = red; this.green = green; this.blue = blue; this.name = name; 60

61 Classe SynchronizedRGB(2) public void set(int red, int green, int blue, String name) { check(red, green, blue); synchronized (this) { this.red = red; this.green = green; this.blue = blue; this.name = name; public synchronized int getrgb() { return ((red << 16) (green << 8) blue); public synchronized String getname() { return name; public synchronized void invert() { red = red; green = green; blue = blue; name = "Inverse of " + name; 61

62 Problemi di consistenza una thread A esegue il codice seguente SynchronizedRGB color = new SynchronizedRGB(0,0,0, "Black"); int mycolorint = color.getrgb(); String mycolorname = color.getname(); un altra thread invoca color.set dopo l invocazione a color.getrgb e prima di color.getname la prima thread in mycolorint e mycolorname ha dei dati spuri che possono non corrispondere ad uno stato assunto dall oggetto color 62

63 Problemi di consistenza Questo problema si può evitare con un blocco sincronizzato synchronized (color) { int mycolorint = color.getrgb(); String mycolorname = color.getname(); In generale, le classi di oggetti immutabili non danno problemi di consistenza e il loro uso è sicuro in ambienti concorrenti 63

64 Strategia per definire classi immutabili non fornire metodi modificatori rendere le variabili di istanza final e private impedire alle sottoclassi di sovrascrivere metodi classe dichiarata final (semplice) oppure costruttore private e istanziare oggetti attraverso metodi static (sofisticato) se le variabili di istanza contengono riferimenti a oggetti mutabili non far modificare questi oggetti: non fornire metodi che modificano questi oggetti non condividere questi riferimenti fuori della classe (usare clonazione) 64

65 Classe ImmutableRGB final public class ImmutableRGB { final private int red, green, blue; final private String name; private void check(int red, int green, int blue) { if (red < 0 red > 255 green < 0 green > 255 blue < 0 blue > 255) { throw new IllegalArgumentException(); public ImmutableRGB(int red, int green, int blue, String name) { check(red, green, blue); this.red = red; this.green = green; this.blue = blue; this.name = name; public synchronized int getrgb() { return ((red << 16) (green << 8) blue); public synchronized String getname() { return name; public ImmutableRGMB invert() { return new ImmutableRGB(255 - red, green, blue, "Inverse of " + name); 65

66 API avanzate per la concorrenza oggetti Lock permettono di gestire monitor esplicitamente Strutture dati ad accesso concorrente permettono di ridurre l uso della sincronizzazione Es. BlockingQueue,ConcurrentMap,etc. Variabili Atomic (AtomicInteger, ) evitano errori di consistenza e riducono il ricorso alla sincronizzazione Numeri casuali concorrenti (java.util.concurrent.threadlocalrandom) Executors (Interface,Thread Pools, Fork/Join) high-level API per il lancio e la gestione delle thread 66

67 Executors in tutti gli esempi visti esiste un collegamento stretto tra il compito svolto da una thread (come definito da Runnable) e la thread stessa (come definita da Thread) va bene per piccole applicazioni per programmi complessi ha senso separare la creazione e la gestione di una thread dal compito svolto dalla thread stessa. gli aspetti di creazione/gestione delle thread sono svolte dagli executors. interfacce Executor: definiscono tre tipi di oggetti executor thread pools: sono le più comuni implementazioni di executor fork/join: è una infrastruttura (nuova in JDK 7) per sfruttare processori multipli 67

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. - lezione 14 - Thread in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. - lezione 14 - Thread in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it - lezione 14 - Thread in Java 1 Cos è un

Dettagli

Sistemi Operativi Sincronizzazione tra Processi

Sistemi Operativi Sincronizzazione tra Processi Sistemi Operativi Processi Docente: Claudio E. Palazzi cpalazzi@math.unipd.it Crediti per queste slides al Prof. Tullio Vardanega 1 Processi indipendenti possono avanzare concorrentemente senza alcun vincolo

Dettagli

Il Concetto di Processo

Il Concetto di Processo Processi e Thread Il Concetto di Processo Il processo è un programma in esecuzione. È l unità di esecuzione all interno del S.O. Solitamente, l esecuzione di un processo è sequenziale (le istruzioni vengono

Dettagli

Programmazione di rete in Java

Programmazione di rete in Java Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo

Dettagli

Programmazione Java: Variabili membro, Metodi La parola chiave final

Programmazione Java: Variabili membro, Metodi La parola chiave final Programmazione Java: Variabili membro, Metodi La parola chiave final romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Definire una classe» Variabili membro» Metodi La parola chiave

Dettagli

Classi ed Oggetti in JAVA

Classi ed Oggetti in JAVA Classi ed Oggetti in JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA Uff. 0577233606 rigutini@dii.unisi.it www.dii.unisi.it/~rigutini/

Dettagli

Middleware Laboratory. Dai sistemi concorrenti ai sistemi distribuiti

Middleware Laboratory. Dai sistemi concorrenti ai sistemi distribuiti Dai sistemi concorrenti ai sistemi distribuiti Problemi nei sistemi concorrenti e distribuiti I sistemi concorrenti e distribuiti hanno in comune l ovvio problema di coordinare le varie attività dei differenti

Dettagli

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); } import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione Sede di Latina Corso di Laurea in Ingegneria dell Informazione Consorzio Nettuno La fase di realizzazione si occupa

Dettagli

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

R.Focardi Laboratorio di Ingegneria del Software 6. 1

R.Focardi Laboratorio di Ingegneria del Software 6. 1 Networking Java permette comunicazioni in rete basate sul concetto di socket, che permette di vedere la comunicazione in termini di flusso (stream), in modo analogo all input-output di file, usando Stream

Dettagli

esercizi Esercizi / problemi

esercizi Esercizi / problemi Sistemi informativi applicati (reti di calcolatori): esercizi 1 Esercizi / problemi 1. Creare un applicazione che calcoli la media aritmetica dei seguenti valori interi: 35, 117, 23 e ne visualizzi il

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java Fondamenti di Informatica Dichiarazione, creazione e gestione di array in Java Array in Java - creazione La creazione fa una inizializzazione implicita: num = new int[10]; con valore 0 per int e double,

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Riferimenti ed Oggetti

Riferimenti ed Oggetti Riferimenti e oggetti Riferimenti ed Oggetti In non si possono definire variabili di tipo oggetto ma solo di tipo riferimento a oggetto. I riferimenti sono assimilabili ai tipi base. Allocazione statica

Dettagli

BPEL: Business Process Execution Language

BPEL: Business Process Execution Language Ingegneria dei processi aziendali BPEL: Business Process Execution Language Ghilardi Dario 753708 Manenti Andrea 755454 Docente: Prof. Ernesto Damiani BPEL - definizione Business Process Execution Language

Dettagli

Pila.h versione 6. class Pila { private: int marker; int * contenuto; public:

Pila.h versione 6. class Pila { private: int marker; int * contenuto; public: 1 Pila.h versione 6 struct Pila { private: int size; int defaultgrowthsize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialsize) ; Pila(); ~Pila() ; void copy(pila * to)

Dettagli

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese Inter Process Communication Laboratorio Software 2008-2009 C. Brandolese Introduzione Più processi o thread Concorrono alla relaizzazione di una funzione applicativa Devono poter realizzare Sincronizzazione

Dettagli

Descrizioni VHDL Behavioral

Descrizioni VHDL Behavioral 1 Descrizioni VHDL Behavioral In questo capitolo vedremo come la struttura di un sistema digitale è descritto in VHDL utilizzando descrizioni di tipo comportamentale. Outline: process wait statements,

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java Riassunto Rassegna API - 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 17 3 maggio 2015! Programmazione

Dettagli

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity CORSO DI ALGORITMI E PROGRAMMAZIONE JDBC Java DataBase Connectivity Anno Accademico 2002-2003 Accesso remoto al DB Istruzioni SQL Rete DataBase Utente Host client Server di DataBase Host server Accesso

Dettagli

Visibilità dei Membri di una Classe

Visibilità dei Membri di una Classe Visibilità dei Membri di una Classe Lezione 10 Ogni classe definisce un proprio scope racchiude il codice contenuto nella definizione della classe e di tutti i suoi membri ogni metodo della classe definisce

Dettagli

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java]

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java] Desideriamo realizzare una applicazione web che ci consenta di calcolare il fattoriale di un numero. L'esercizio in sé non particolarmente difficile, tuttavia esso ci consentirà di affrontare il problema

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Progettazione Orientata agli Oggetti

Progettazione Orientata agli Oggetti Progettazione Orientata agli Oggetti Sviluppo del software Ciclo di vita del software: comprende tutte le attività dall analisi iniziale fino all obsolescenza (sviluppo, aggiornamento, manutenzione) Procedimento

Dettagli

Introduzione alle applicazioni di rete

Introduzione alle applicazioni di rete Introduzione alle applicazioni di rete Definizioni base Modelli client-server e peer-to-peer Socket API Scelta del tipo di servizio Indirizzamento dei processi Identificazione di un servizio Concorrenza

Dettagli

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table Universita' di Ferrara Dipartimento di Matematica e Informatica Algoritmi e Strutture Dati Rappresentazione concreta di insiemi e Hash table Copyright 2006-2015 by Claudio Salati. Lez. 9a 1 Rappresentazione

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata Supponiamo sempre di avere un ponte stretto che permette il passaggio delle auto solo in un verso per volta,

Dettagli

BlackBerry Java SDK. Integration Guide Version: 7.0. Guida allo sviluppo

BlackBerry Java SDK. Integration Guide Version: 7.0. Guida allo sviluppo BlackBerry Java SDK Integration Guide Version: 7.0 Guida allo sviluppo SWD-1638866-1215040530-0 Contents 1 Integrazione con le applicazioni BlackBerry Device Software... 6 Richiamo di un'applicazione BlackBerry

Dettagli

Gli algoritmi. Gli algoritmi. Analisi e programmazione

Gli algoritmi. Gli algoritmi. Analisi e programmazione Gli algoritmi Analisi e programmazione Gli algoritmi Proprietà ed esempi Costanti e variabili, assegnazione, istruzioni, proposizioni e predicati Vettori e matrici I diagrammi a blocchi Analisi strutturata

Dettagli

1 EJB e Portal Component Object http://desvino.altervista.org

1 EJB e Portal Component Object http://desvino.altervista.org 1 EJB e Portal Component Object http://desvino.altervista.org In questo tutorial studiamo come sfruttare la tecnologia EJB, Enterprise JavaBean, all interno del SAP Netweaver Portal. In breve, EJB è un

Dettagli

Introduzione al linguaggio C Gli array

Introduzione al linguaggio C Gli array Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome

Dettagli

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni. Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni

Dettagli

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute DNS: Domain Name System I name DNS Persone: identificatori: CF, nome, Numero di Passaporto Host e router Internet: Indirizzo IP ( bit) - usato per instradare i pacchetti nome, per es., massimotto.diiie.unisa.it

Dettagli

Finestra.java. static String nomicolonne[] = {"ind.","cognome","nome","telefono","e-mail"}; //nomi delle colonne della tabella

Finestra.java. static String nomicolonne[] = {ind.,cognome,nome,telefono,e-mail}; //nomi delle colonne della tabella import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowevent; import java.awt.event.windowlistener; import java.io.*; import java.util.*;

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1 DIAGRAMMI A BLOCCHI TEORIA ED ESERCIZI 1 1 Il linguaggio dei diagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi Il diagramma a blocchi, o flowchart, è una rappresentazione grafica

Dettagli

Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN)

Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN) Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN) System Overview di Mattia Bargellini 1 CAPITOLO 1 1.1 Introduzione Il seguente progetto intende estendere

Dettagli

Esercitazione 7. Procedure e Funzioni

Esercitazione 7. Procedure e Funzioni Esercitazione 7 Procedure e Funzioni Esercizio Scrivere un programma che memorizza in un array di elementi di tipo double le temperature relative al mese corrente e ne determina la temperatura massima,

Dettagli

e-spare Parts User Manual Peg Perego Service Site Peg Perego [Dicembre 2011]

e-spare Parts User Manual Peg Perego Service Site Peg Perego [Dicembre 2011] Peg Perego Service Site Peg Perego [Dicembre 2011] 2 Esegui il login: ecco la nuova Home page per il portale servizi. Log in: welcome to the new Peg Perego Service site. Scegli il servizio selezionando

Dettagli

Analisi di massima: L utente dovrà inserire un numero limite, e tramite vari calcoli verrà stampato a video la sequenza.

Analisi di massima: L utente dovrà inserire un numero limite, e tramite vari calcoli verrà stampato a video la sequenza. Relazione tecnica Fibonacci ANDENA GIANMARCO Traccia: Creare un algoritmo che permetta, dato un valore intero e positivo, di stabilire la sequenza utilizzando la regola di fibonacci dei numeri fino al

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Introduzione alla programmazione ad oggetti a.a. 2008/2009 Claudio De Stefano 1 La programmazione modulare Un programma può essere visto come un insieme di moduli che

Dettagli

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

Semplici Algoritmi di Ordinamento

Semplici Algoritmi di Ordinamento Fondamenti di Informatica Semplici Algoritmi di Ordinamento Fondamenti di Informatica - D. Talia - UNICAL 1 Ordinamento di una sequenza di elementi Esistono molti algoritmi di ordinamento. Tutti ricevono

Dettagli

Le funzionalità di un DBMS

Le funzionalità di un DBMS Le funzionalità di un DBMS Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: DBMS.pdf Sistemi Informativi L-A DBMS: principali funzionalità Le

Dettagli

Le Stringhe. Un introduzione operativa. Luigi Palopoli

Le Stringhe. Un introduzione operativa. Luigi Palopoli Le Stringhe p.1/19 Le Stringhe Un introduzione operativa Luigi Palopoli ReTiS Lab - Scuola Superiore S. Anna Viale Rinaldo Piaggio 34 Pontedera - Pisa Tel. 050-883444 Email: palopoli@sssup.it URL: http://feanor.sssup.it/

Dettagli

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C.:luxx:. PREMESSE In questa guida non verranno trattati i costrutti di flusso, le funzioni, o comunque le caratteristiche del linguaggio, che si danno come presupposte.

Dettagli

Definizione. File di dati. Insieme di record omogenei memorizzati in memoria di massa. Record. Bianchi. Anna Roma 1980. Verdi. Luca Milano 1960.

Definizione. File di dati. Insieme di record omogenei memorizzati in memoria di massa. Record. Bianchi. Anna Roma 1980. Verdi. Luca Milano 1960. File di dati Definizione File di dati Insieme di record omogenei memorizzati in memoria di massa Bianchi Verdi Neri Verdi Anna Roma 1980 Luca Milano 1960 Andrea Torino 1976 Paola Bari 1954 Record Operazioni

Dettagli

MIB PER IL CONTROLLO DELLO STATO DI UN SERVER FTP

MIB PER IL CONTROLLO DELLO STATO DI UN SERVER FTP Università degli Studi di Pisa Facoltà di Scienze Matematiche,Fisiche e Naturali Corso di Laurea in Informatica Michela Chiucini MIB PER IL CONTROLLO DELLO STATO DI UN SERVER

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli

Dettagli

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

Generalizzazione di funzioni e di classi. Macro come funzioni generiche Alessio Bechini - Corso di - Generalizzazione di funzioni e di classi Il meccanismo di template Macro come funzioni generiche long longmax(long x, long y) { Possibile soluzione int intmax(int x, int y)

Dettagli

Dipartimento di Sistemi e Informatica Università degli Studi di Firenze. Dev-C++ Ing. Michele Banci 27/03/2007 1

Dipartimento di Sistemi e Informatica Università degli Studi di Firenze. Dev-C++ Ing. Michele Banci 27/03/2007 1 Dipartimento di Sistemi e Informatica Università degli Studi di Firenze Dev-C++ Ing. Michele Banci 27/03/2007 1 Utilizzare Dev-C++ Tutti i programmi che seranno realizzati richiedono progetti separati

Dettagli

Le system call: fork(), wait(), exit()

Le system call: fork(), wait(), exit() Le system call: fork(), wait(), exit() Di seguito viene mostrato un programma che fa uso di puntatori a funzione, nel quale si mette in evidenza il loro utilizzo. Programma A1 #include int add(a,b,c)

Dettagli

Un oggetto per la lettura dalla tastiera

Un oggetto per la lettura dalla tastiera Fondamenti di informatica Oggetti e Java ottobre 2012 1 Un oggetto per la lettura dalla tastiera Le API di Java hanno un oggetto System.in che rappresenta la tastiera del calcolatore, ma che non è semplice

Dettagli

Inizializzazione degli Host. BOOTP e DHCP

Inizializzazione degli Host. BOOTP e DHCP BOOTP e DHCP a.a. 2002/03 Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/~auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica 1 Inizializzazione degli Host Un

Dettagli

I vostri documenti sempre disponibili e sincronizzati.

I vostri documenti sempre disponibili e sincronizzati. gestione documentale I vostri documenti sempre disponibili e sincronizzati. In qualsiasi momento e da qualsiasi parte del mondo accedendo al portale Arxidoc avete la possibilità di ricercare, condividere

Dettagli

P a s q u a l e t t i V e r o n i c a

P a s q u a l e t t i V e r o n i c a PHP: OOP Pasqualetti Veronica Oggetti Possiamo pensare ad un oggetto come ad un tipo di dato più complesso e personalizzato, non esistente fra i tipi tradizionali di PHP, ma creato da noi. 2 Gli oggetti

Dettagli

Funzioni. Corso di Fondamenti di Informatica

Funzioni. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Funzioni Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti e dei

Dettagli

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ Classi ed oggetti. Classi derivate, ereditarietà e polimorfismo. Template Capitoli 12, 13, 14 Luis Joyannes Aguilar. Fondamenti di Programmazione in C++. Algoritmi,

Dettagli

Integrazione di servizi: Enterprise Service Bus (ESB) e Business Process Execution Language (BPEL)

Integrazione di servizi: Enterprise Service Bus (ESB) e Business Process Execution Language (BPEL) Università degli Studi di Roma Tor Vergata Facoltà di Ingegneria Integrazione di servizi: Enterprise Service Bus (ESB) e Business Process Execution Language (BPEL) Corso di Sistemi Distribuiti Stefano

Dettagli

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo.

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo. In una rete di ampie dimensioni, ciascuna sottorete (es. LAN, WAN) è connessa ad altre sottoreti tramite router. Internet è un insieme di reti connesse tra loro. Essenzialmente, in una rete alcune macchine

Dettagli

Ricerca sequenziale di un elemento in un vettore

Ricerca sequenziale di un elemento in un vettore Ricerca sequenziale di un elemento in un vettore La ricerca sequenziale o lineare è utilizzata per ricercare i dati in un vettore NON ordinato. L algoritmo di ricerca sequenziale utilizza quan non ha alcuna

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi alternative: function nome { lista-comandi } oppure nome ( ) {

Dettagli

Elementi di semantica denotazionale ed operazionale

Elementi di semantica denotazionale ed operazionale Elementi di semantica denotazionale ed operazionale 1 Contenuti! sintassi astratta e domini sintattici " un frammento di linguaggio imperativo! semantica denotazionale " domini semantici: valori e stato

Dettagli

MODELLO AD OGGETTI PER LE BASI DI DATI E ANALISI DI PRODOTTI COMMERCIALI. Luca Carnini. Tesina presentata per la discussione del diploma di laurea in

MODELLO AD OGGETTI PER LE BASI DI DATI E ANALISI DI PRODOTTI COMMERCIALI. Luca Carnini. Tesina presentata per la discussione del diploma di laurea in MODELLO AD OGGETTI PER LE BASI DI DATI E ANALISI DI PRODOTTI COMMERCIALI di Luca Carnini Tesina presentata per la discussione del diploma di laurea in Ingegneria informatica Politecnico di Milano sede

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni Funzioni Le funzioni Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, consente di calcolare un risultato, come avviene anche per una funzione matematica

Dettagli

Scuola Specializzazione Istruzione Superiore. Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti

Scuola Specializzazione Istruzione Superiore. Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti Scuola Specializzazione Istruzione Superiore Object Oriented Programming (OOP) Introduzione alla programmazione orientata agli oggetti Michele Batocchi ITC Vittorio Emanuele II Perugia A.S. 2007/2008 Introduzione

Dettagli

Sottoprogrammi: astrazione procedurale

Sottoprogrammi: astrazione procedurale Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Creare una applicazione Winsock di base

Creare una applicazione Winsock di base Creare una applicazione Winsock di base Usiamo le API Winsock incluse in Creare un progetto per una Socket Windows (in Dev C++) Selezionare la file New Projects Selezionare Empty Project Salvare

Dettagli

Fondamenti di Informatica T. Linguaggio C: File

Fondamenti di Informatica T. Linguaggio C: File Linguaggio C: File I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa, che consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale.

Dettagli

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it UML: Class Diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania Class Diagram Forniscono una vista strutturale

Dettagli

sed: editor non interattivo di file di testo (1974 nei Bell Labs come evoluzione di grep, Lee E. McMahon)

sed: editor non interattivo di file di testo (1974 nei Bell Labs come evoluzione di grep, Lee E. McMahon) Sed & Awk Sed e Awk sed: editor non interattivo di file di testo (1974 nei Bell Labs come evoluzione di grep, Lee E. McMahon) awk: linguaggio per l'elaborazione di modelli orientato ai campi (1977, Bell

Dettagli

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File

Dettagli

Ricorsione. Corso di Fondamenti di Informatica

Ricorsione. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Ricorsione Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti e

Dettagli

CREAZIONE DI UN FILE

CREAZIONE DI UN FILE #include #include CREAZIONE DI UN FILE fd = creat(filename, mode); int fd, mode; char *filename; La primitiva creat crea un file, se non ne esiste uno col nome specificato, oppure

Dettagli

Ambienti di sviluppo integrato

Ambienti di sviluppo integrato Ambienti di sviluppo integrato Un ambiente di sviluppo integrato (IDE - Integrated Development Environment) è un ambiente software che assiste i programmatori nello sviluppo di programmi Esso è normalmente

Dettagli

MIPS Instruction Set 2

MIPS Instruction Set 2 Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general

Dettagli

Controllare un nastro trasportatore fischertechnik con Arduino

Controllare un nastro trasportatore fischertechnik con Arduino TITOLO ESPERIENZA: Controllare un nastro trasportatore fischertechnik con Arduino PRODOTTI UTILIZZATI: OBIETTIVO: AUTORE: RINGRAZIAMENTI: Interfacciare e controllare un modello di nastro trasportatore

Dettagli

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di esempio CERCA 90 NEL SACCHETTO = estrai num Casi num 90 Effetti CERCA 90 NEL

Dettagli

Un client su arduino invia i dati acquisiti ad un database

Un client su arduino invia i dati acquisiti ad un database Un client su arduino invia i dati acquisiti ad un database PROBLEMA Si vogliono inviare, periodicamente, i dati acquisiti da alcuni sensori ad un database presente su di un server. Arduino con shield Ethernet

Dettagli

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate.

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate. Comandi filtro: sed Il nome del comando sed sta per Stream EDitor e la sua funzione è quella di permettere di editare il testo passato da un comando ad un altro in una pipeline. Ciò è molto utile perché

Dettagli

Integrare le MFC con Irrlicht. Sezione 1: Creazione del progetto. by Raffaele White tiger Mancuso

Integrare le MFC con Irrlicht. Sezione 1: Creazione del progetto. by Raffaele White tiger Mancuso Integrare le MFC con Irrlicht by Raffaele White tiger Mancuso In questo topic spiegherò come integrare irrlicht in un documento singolo MFC *(1). Io ho usato il visual c++ 6 ma la procedura dovrebbe essere

Dettagli

Web Conferencing Open Source

Web Conferencing Open Source Web Conferencing Open Source A cura di Giuseppe Maugeri g.maugeri@bembughi.org 1 Cos è BigBlueButton? Sistema di Web Conferencing Open Source Basato su più di quattordici componenti Open-Source. Fornisce

Dettagli

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 08/03/07 Nota Questi lucidi sono tratti

Dettagli

Programmazione di un dispositivo 1to4INTGEN

Programmazione di un dispositivo 1to4INTGEN Programmazione di un dispositivo 1to4INTGEN Realizzazione di un sistema timesharing Materiale didattico a cura di: Prof. A. Mazzeo Ing. L. Romano Ing. L. Coppolino Ing. A. Cilardo Dipartimento di Informatica

Dettagli

Progetti reali con ARDUINO

Progetti reali con ARDUINO Progetti reali con ARDUINO Introduzione alla scheda Arduino (parte 2ª) ver. Classe 3BN (elettronica) marzo 22 Giorgio Carpignano I.I.S. Primo LEVI - TORINO Il menù per oggi Lettura dei pulsanti Comunicazione

Dettagli

Serduino - SERRA CON ARDUINO

Serduino - SERRA CON ARDUINO Serduino - SERRA CON ARDUINO 1 Componenti Facchini Riccardo (responsabile parte hardware) Guglielmetti Andrea (responsabile parte software) Laurenti Lorenzo (progettazione hardware) Rigolli Andrea (reparto

Dettagli

Inter-Process Communication

Inter-Process Communication Inter-Process Communication C. Baroglio a.a. 2002-2003 1 Introduzione In Unix i processi possono essere sincronizzati utilizzando strutture dati speciali, appartenti al pacchetto IPC (inter-process communication).

Dettagli

Appunti di Sistemi Operativi. Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo

Appunti di Sistemi Operativi. Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo Appunti di Sistemi Operativi Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo Indice 1 Cenni su alcuni algoritmi del Kernel di Unix 1 1.1 Elementi di Unix Internals.................................

Dettagli