Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009
|
|
- Fabia Grilli
- 6 anni fa
- Visualizzazioni
Transcript
1 Thread: sincronizzazione Esercitazioni del 16 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria 19 ottobre 2009
2 Sequenze di esecuzione - 2 Sequenze di esecuzione - 2 Esercizio 1 Sequenze di esecuzione - 2 Dato il seguente programma e le seguenti sequenze di esecuzione, dire quali possono essere prodotte da tale programma e quali no; si suppone sempre una esecuzione atomica dell istruzione printf. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 5 pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; 6 7 int e = 0; 8 9 void * th_fun1( void * arg){ 10 printf( X - 1\n ); 11 pthread_mutex_lock(& mutexa); 12 e = 1; 13 printf( X - 2\n ); 14 printf( X - 3\n ); 15 pthread_mutex_unlock (& mutexa); 16 printf( X - 4\n ); 17 return NULL; 18 } 19 void * th_fun2( void * arg){ 20 printf( Y - 1\n ); 21 while(e == 0) 22 ; 23 pthread_mutex_lock(& mutexa); 24 printf( Y - 2\n ); 25 pthread_mutex_unlock (& mutexa); 26 printf( Y - 3\n ); 27 return NULL; 28 } 29 int main( int argc, char * argv[]){ 30 pthread_t th1, th2; 31 int d; pthread_create(& th1, NULL, th_fun2, NULL); 34 pthread_create(& th2, NULL, th_fun1, NULL); pthread_join(th1, NULL); 37 pthread_join(th2, NULL); return 0; 40 } Con la variabile e si garantisce che la sezione critica di th_fun2 venga eseguita dopo la sezione critica di th_fun1, per cui tutte le tracce di esecuzione in cui Y-2 e eseguita dopo la sequenza X 2, X 3 sono valide. Notare che questo include anche la serializzazione del thread th_fun1 seguito dal thread th_fun2.
3 Race-Condition Race-Condition Esercizio 2 Race-Condition Identificare le race-conditions presenti nel seguente programma e modificare quest ultimo in modo tale da risolvere il seguente problema: Due persone (P1 e P2) diverse devono maneggiare due conti in banca (C1 e C2): P1 deve depositare 10 in C1 e prelevare 20 da C2; P2 deve depositare 40 in C1 e 20 in C2. Notare che i due conti in banca devono poter essere maneggiati separatamente. Risolvere il problema sostituendo a? lock o unlock e a il nome del mutex relativo. # include <stdlib.h> # include <stdio.h> # include <pthread.h> pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutexb = PTHREAD_MUTEX_INITIALIZER; int conto1 = 100; int conto2 = 100; void * persona1( void * arg){ pthread_mutex_?(& ); conto1 += 10; pthread_mutex_?(& ); pthread_mutex_?(& ); conto2 -= 20; pthread_mutex_?(& ); return NULL; } void * persona2( void * arg){ pthread_mutex_lock(& ); conto2 += 20; pthread_mutex_unlock (& ); pthread_mutex_?(& ); conto1 += 40; pthread_mutex_?(& ); return NULL; } int main( int argc, char * argv[]){ pthread_t th1, th2; pthread_create(& th1, NULL, persona1, NULL); pthread_create(& th2, NULL, persona2, NULL); pthread_join(th1, NULL); pthread_join(th2, NULL); } return 0;
4 Race-Condition Race-Condition Soluzione La race condition esiste per il fatto che entrambi i conti correnti sono modificati in parallelo da entrambe le persone. Per correggere il problema è necessario proteggere l accesso ai conti in banca con due mutex, uno per ogni conto corrente. # include <stdlib.h> # include <stdio.h> # include <pthread.h> pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutexb = PTHREAD_MUTEX_INITIALIZER; int conto1 = 100; int conto2 = 100; void * persona1( void * arg){ pthread_mutex_lock(& mutexa); conto1 += 10; pthread_mutex_unlock (& mutexa); pthread_mutex_lock(& mutexb); conto2 -= 20; pthread_mutex_unlock (& mutexb); return NULL; } void * persona2( void * arg){ pthread_mutex_lock(& mutexb); conto2 += 20; pthread_mutex_unlock (& mutexb); pthread_mutex_lock(& mutexa); conto1 += 40; pthread_mutex_unlock (& mutexa); return NULL; } int main( int argc, char * argv[]){ pthread_t th1, th2; pthread_create(& th1, NULL, persona1, NULL); pthread_create(& th2, NULL, persona2, NULL); pthread_join(th1, NULL); pthread_join(th2, NULL); } return 0;
5 Deadlock con Mutex - 1 Deadlock con Mutex - 1 Esercizio 3 Deadlock con Mutex - 1 Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare la sequenza di istruzioni che porta alla situazione di deadlock e produrre il grafo di attesa. Ricordasi che, usando i mutex, sia ha possibilità di deadlock nel caso due o più thread diversi acquisiscano due o più mutex in ordine diverso, con tali sequenze di acquisizione innestate una dentro l altra; questa è la situazione più comune, ma non l unica, attravero la quale si può avere una situazione di deadlock. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 5 pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; 6 pthread_mutex_t mutexb = PTHREAD_MUTEX_INITIALIZER; 7 8 void * thread1( void * arg){ 9 pthread_mutex_lock(& mutexa); 10 pthread_mutex_lock(& mutexb); 11 printf( Sono il thread_1\n ); 12 pthread_mutex_unlock (& mutexb); 13 pthread_mutex_unlock (& mutexa); 14 return NULL; 15 } 16 void * thread2( void * arg){ 17 pthread_mutex_lock(& mutexb); 18 pthread_mutex_lock(& mutexa); 19 printf( Sono il thread_2\n ); 20 pthread_mutex_unlock (& mutexa); 21 pthread_mutex_unlock (& mutexb); 22 return NULL; 23 } int main( int argc, char * argv[]){ 26 pthread_t th1, th2; pthread_create(& th1, NULL, thread1, NULL); 29 pthread_create(& th2, NULL, thread2, NULL); 30 pthread_join(th1, NULL); 31 pthread_join(th2, NULL); return 0; 34 } Si può facilmente identificare la situazione che porta alla generazione di un deadlock: thread1 blocca mutexa e contemporaneamente thread2 blocca mutexb; nessuno dei due thread potrà più procedere, in quanto thread1 aspetta che venga sbloccato mutexb da thread2 e thread2 che venga sbloccato mutexa da thread1.
6 Deadlock con Mutex - 2 Deadlock con Mutex - 2 Esercizio 4 Deadlock con Mutex - 2 Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare la sequenza di istruzioni che porta alla situazione di deadlock e produrre il grafo di attesa. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 5 pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; 6 pthread_mutex_t mutexb = PTHREAD_MUTEX_INITIALIZER; 7 8 void foo( int val){ 9 pthread_mutex_lock(& mutexb); 10 val *= 2; 11 if( val > 4) 12 pthread_mutex_unlock (& mutexb); 13 } void * thread1( void * arg){ 16 pthread_mutex_lock(& mutexa); 17 foo(( int) arg); /* Invocato con 2, non sblocchera mutex B */ 18 pthread_mutex_unlock (& mutexa); 19 if(( int) arg < 2) 20 pthread_mutex_unlock (& mutexb); /* non sblocca B */ 21 pthread_mutex_lock(& mutexa); /* Attende A */ 22 printf( Sono alla fine del thread1\n ); 23 pthread_mutex_unlock (& mutexa); 24 return NULL; 25 } 26 void * thread2( void * arg){ 27 pthread_mutex_lock(& mutexa); 28 pthread_mutex_lock(& mutexb); /* Attesa infinita su B */ 29 printf( Sono alla fine del thread2\n ); 30 pthread_mutex_unlock (& mutexb); 31 pthread_mutex_unlock (& mutexa); 32 return NULL; 33 } int main( int argc, char * argv[]){ 36 pthread_t th1, th2; pthread_create(& th1, NULL, thread1, ( void *) 2); 39 pthread_create(& th2, NULL, thread2, NULL); 40 pthread_join(th1, NULL); 41 pthread_join(th2, NULL); return 0; 44 }
7 Deadlock con Semafori - 1 Deadlock con Semafori - 1 Questo programma è stato chiaramente strutturato male, in quanto thread1 non libererà mai la risorsa mutexb nel caso l argomento val della funzione foo sia uguale a 2. In questo caso, se thread1 blocca mutexb prima che lo faccia thread2, quest ultimo resterà bloccato in attesa che venga liberato, cosa che non accadrà mai. Il grafo di attesa e mostrato in figura 1. Figura 1: Grafo di attesa. Esercizio 5 Deadlock con Semafori - 1 Un deadlock dovuto ad accesso sincronizzato alle risorse puo in generale verificarsi se: Mutua esclusione: almeno una delle risorse del sistema deve essere non condivisibile (ossia usata da un processo alla volta oppure libera). Possesso ed attesa: i processi che possiedono almeno una risorsa, devono attendere prima di richiederne altre (gia allocate ad altri processi). Impossibilita di prelazione: solo il processo che detiene la risorsa puo rilasciarla. Attesa circolare. Un semaforo puo essere visto come un tipo particolare di risorsa quando e usato come un mutex (range contatore 0,1). Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare la sequenza di istruzioni che porta alla situazione di deadlock e produrre il grafo di attesa. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 # include <semaphore.h> 5 6 pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; 7 sem_t sem; 8 9 int c,e = 0;
8 Deadlock con Semafori - 1 Deadlock con Semafori void * th_fun1( void * arg){ 12 int i = 0; 13 for(i = 0; i < ( int) arg; i++){ 14 pthread_mutex_lock(& mutexa); 15 sem_wait(& sem); 16 pthread_mutex_unlock (& mutexa); 17 } 18 return NULL; 19 } 20 void * th_fun2( void * arg){ 21 int i = 0; 22 for(i = 0; i < ( int) arg; i++){ 23 pthread_mutex_lock(& mutexa); 24 sem_post(& sem); 25 pthread_mutex_unlock (& mutexa); 26 } 27 return NULL; 28 } 29 int main( int argc, char * argv[]){ 30 pthread_t th1, th2; sem_init(& sem, 0, 0); 33 pthread_create(& th1, NULL, th_fun1, ( void *) 3); 34 pthread_create(& th2, NULL, th_fun2, ( void *) 4); pthread_join(th1, NULL); 37 pthread_join(th2, NULL); return 0; 40 } É presente un deadlock nel caso l istruzione sem_wait si blocca perchè il semaforo è vuoto; in una tale situazione, th_fun1 aspetta th_fun2, ma, nello stesso momento, th_fun2 è bloccato in attesa che mutexa venga rilasciato da th_fun1. Il grafo di attesa e mostrato in figura 2. Figura 2: Grafo di attesa.
9 Deadlock con Semafori - 2 Deadlock con Semafori - 2 Esercizio 6 Deadlock con Semafori - 2 Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare la sequenza di istruzioni che porta alla situazione di deadlock e produrre il grafo di attesa. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 # include <semaphore.h> 5 6 sem_t sem_vuoto1; 7 sem_t sem_pieno1; 8 9 sem_t sem_vuoto2; 10 sem_t sem_pieno2; int coda1; 13 int coda2; void * th_fun1( void * arg){ 16 sem_wait(& sem_vuoto1); 17 sem_wait(& sem_pieno2); 18 coda1 = rand(); 19 printf( Il valore della coda2 e %d\n, coda2); 20 sem_post(& sem_pieno1); 21 sem_post(& sem_vuoto2); 22 return NULL; 23 } 24 void * th_fun2( void * arg){ 25 sem_wait(& sem_vuoto2); 26 sem_wait(& sem_pieno1); 27 coda2 = rand(); 28 printf( Il valore della coda1 e %d\n, coda1); 29 sem_post(& sem_pieno2); 30 sem_post(& sem_vuoto1); 31 return NULL; 32 } 33 int main( int argc, char * argv[]){ 34 pthread_t th1, th2; sem_init(& sem_vuoto1, 0, 0); 37 sem_init(& sem_vuoto2, 0, 0); 38 sem_init(& sem_pieno1, 0, 1); 39 sem_init(& sem_pieno2, 0, 1); 40 pthread_create(& th1, NULL, th_fun1, ( void *) 3); 41 pthread_create(& th2, NULL, th_fun2, ( void *) 4); pthread_join(th1, NULL); 44 pthread_join(th2, NULL); return 0;
10 Deadlock con Semafori - 3 Deadlock con Semafori } Nessuno dei due thread riesce a procedere in quanto entrambi devono aspettare che l altro thread faccia l incremento di sem_vuoto. Esercizio 7 Deadlock con Semafori - 3 Indicare se nell esercizio 5 sono presenti deadlock se il semaforo e inizializzato a 1. Esercizio 8 Valore Variabili - 1 Dato il seguente programma, riempire la tabella in figura 3 segnando il valore delle variabili in corrispondenza degli statement indicati. Il valore di una variabile puo essere indicato come: Intero, carattere, stringa, se univocamente individuabile. NE: se la variabile non esiste. UND: se la variabile esiste ma non e stata ancora inizializzata. Nel caso in cui una variabile puo avere massimo due valori V1 e V2 indicare il valore come V1/V2. Per i casi in cui la variabile puo avere piu di due valori utilizzare il simbolo UNK. Con l etichetta Dopo Linea X si intende il valore (o i valori) assumibili dalla variabile tra lo statement X e lo statement next(x) all interno dello stesso thread. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 5 pthread_mutex_t mutexa = PTHREAD_MUTEX_INITIALIZER; 6 7 int c = 0, e = 0; 8 9 void * th_fun1( void * arg){ 10 int a = 0, b = ( int) arg; 11 pthread_mutex_lock(& mutexa); 12 e = 1; 13 a = b + c; 14 pthread_mutex_unlock (& mutexa); 15 return ( void *) a; 16 } 17 void * th_fun2( void * arg){ 18 while(e == 0) 19 ; 20 pthread_mutex_lock(& mutexa); 21 c = (( int) arg)*2;
11 Valore Variabili - 2 Valore Variabili pthread_mutex_unlock (& mutexa); 23 return ( void *) c; 24 } 25 int main( int argc, char * argv[]){ 26 pthread_t th1, th2; 27 int d; pthread_create(& th1, NULL, th_fun1, ( void *) 3); 30 pthread_create(& th2, NULL, th_fun2, ( void *) 4); pthread_join(th1, (void *)&d); 33 pthread_join(th2, (void *)&d); return 0; 36 } Thread Dopo Linea Valore delle Variabili a b c d e th1 12 th1 13 th1 14 th2 22 main 32 main 33 Figura 3: Tabella iniziale. Thread Dopo Linea Valore delle Variabili a b c d e th UND 1 th UND 1 th (prima di riga 21)/8 (dopo) UND 1 th2 22 3/NE 3 /NE 8 UND/3 1 main 32 NE NE 0 (prima di riga 21)/8 (dopo) 3 1 main 33 NE NE Figura 4: Tabella finale coi valori delle variabili. Esercizio 9 Valore Variabili - 2 Dato il seguente programma: disegnare un grafo di sincronizzazione fra i thread (P0, F1, F2, N1, N2, N3, N4). Il grafo di sincronizzazione è composto da:
12 Valore Variabili - 2 Valore Variabili - 2 cerchi, rappresentanti i thread; frecce uni-direzionali, da un thread T1 ad un thread T2, quando T1 esegue un post su almeno uno dei semafori su cui T2 è in attesa; frecce bi-direzionali, tra un thread T1 e un thread T2, quando T1 esegue un post su almeno uno dei semafori su cui T2 è in attesa e, viceversa, T2 esegue un post su almeno uno dei semafori su cui T1 è in attesa. riempire la tabella dei valori delle variabili (Figura 5) segnando il valore di ciascuna variabile in corrispondenza degli statement indicati. Il valore di una variabile o semaforo può essere indicato come: Intero, carattere, stringa, se univocamente individuabile. NE: se la variabile non esiste. UND: se la variabile esiste ma non è stata ancora inizializzata. UNK: se la variabile può avere più di uno valore. Prestare attenzione all etichetta Condizione. In particolare, con Subito dopo statement X si intende il valore (o i valori) assumibili dalle variabili tra lo statement X e lo statement immediatamente successivo all interno del thread indicato nella condizione stessa. 1 # include <stdlib.h> 2 # include <stdio.h> 3 # include <pthread.h> 4 # include <semaphore.h> 5 6 # define NSEM 7 7 # define DELAY sleep( rand()%2) sem_t sem_start[ NSEM]; 11 sem_t sem_stop[ NSEM]; 12 int ret_status[ NSEM]; void *P( void * arg) 15 { 16 int base = ( int) arg; 17 int alfa; 18 int status; 19 int index; 20 sem_wait(&sem_start[base]); 21 for( alfa =0; alfa <=1; alfa ++) 22 { 23 int off = ( base ==0)? 3 : 1; 24 index = base +1+ off* alfa; 25 sem_post(&sem_start[index]); 26 if( alfa ==1)
13 Valore Variabili - 2 Valore Variabili { 28 sem_wait(&sem_stop[index]); 29 status = ret_status[ index]; 30 } /* STATEMENT A */ 31 } 32 index = base + 1; 33 sem_wait(&sem_stop[index]); 34 status = ret_status[ index]; /* STATEMENT B */ 35 ret_status[ base]= ( alfa); 36 sem_post(&sem_stop[base]); 37 } void *N( void * arg) 40 { 41 int tid= ( int) arg; 42 sem_wait(& sem_start[( int) tid]); 43 ret_status[ tid]= ( tid % 2)? 4 : 3; 44 sem_post(& sem_stop[( int) tid]); /* STATEMENT C */ 45 } int main( int argc, char * argv[]){ 49 pthread_t th_p, th_f1, th_f2; 50 pthread_t th_n1, th_n2, th_n3, th_n4; 51 int i; 52 for(i=0; i<nsem;i++) 53 { 54 sem_init(& sem_start[i],0,0); 55 sem_init(& sem_stop[i],0,0); 56 } 57 srand(time(null)); pthread_create(& th_p0, NULL, P, ( void *) 0); /* P0 */ 60 pthread_create(& th_f1, NULL, P, ( void *) 1); /* F1 */ 61 pthread_create(& th_f2, NULL, P, ( void *) 4); /* F2 */ pthread_create(& th_n1, NULL, N, ( void *) 2); /* N1 */ 64 pthread_create(& th_n2, NULL, N, ( void *) 3); /* N2 */ 65 pthread_create(& th_n3, NULL, N, ( void *) 5); /* N3 */ 66 pthread_create(& th_n4, NULL, N, ( void *) 6); /* N4 */ sem_post(& sem_start [0]); 69 sem_wait(& sem_stop [0]); pthread_join( th_p0, NULL); 72 pthread_join( th_f1, NULL); 73 pthread_join( th_f2, NULL); pthread_join( th_n1, NULL); 76 pthread_join( th_n2, NULL); 77 pthread_join( th_n3, NULL);
14 Valore Variabili - 2 Valore Variabili pthread_join( th_n4, NULL); return 0; 81 } Thread Thread ID Condizione Variabili alfa status sem_stop[6] P0 th_p0 subito dopo statement A in F1 (prima iterazione) P0 th_p0 subito dopo statement A in F2 (prima iterazione) P0 th_p0 subito dopo statement B F1 th_f1 subito dopo statement C in N2 F1 th_f1 subito dopo statement B F2 th_f2 subito dopo statement C in N3 F2 th_f2 subito dopo statement B Figura 5: Tabella dei valori delle variabili. Soluzione Grafo di sincronizzazione. Il grafo connette con delle freccie bi-direzionali P0 a (F1, F2), F2 a (N1, N2) ed F3 a (N3, N4), ed è mostrato in Figura 6. Figura 6: Grafo di sincronizzazione. Notare che gli indici index all interno dell array dei semafori e lo stato di ritorno (ret_status) sono legati ai thread secondo la tabella in Figura 7. La struttura di sincronizzazione in pratica è tale per cui P0, F1 ed F2 fanno partire due thread ciascuno tramite un post sul semaforo sem_start, aspettando la loro terminazione in ordine inverso (attesa su sem_stop). Quindi, P0 fa partire F1 ed F2 e poi attende che termini prima F2 seguito da F1. F1 fa partire N1 ed N2 aspettando che termini prima N2 e poi N1. Infine F2 fa partire N3 ed N4 aspettando che termini prima N4 poi N3.
15 Valore Variabili - 2 Valore Variabili - 2 thread P0 F1 N1 N2 F2 N3 N4 index ret_status Figura 7: Indice e stato di ritorno di ciascun thread. Valore delle variabili. La soluzione sara disponibile venerdi 23 ottobre.
Programmazione di concorrente - Deadlock
Programmazione di concorrente - Deadlock Prof. Gerardo Pelosi & Ing. Michele Scandale 30 Ottobre 2014 Il materiale illustrato a lezione e in queste note contiene anche esempi di Fabrizio Castro, Luca Fossati,
DettagliArchitetture dei Calcolatori e Sistemi Operativi
Prof. Gerardo Pelosi & Ing. Michele Scandale 30 Ottobre 2014 Gerardo Pelosi 1 Esercizio 1 Indicare se nel seguente programma sono presenti deadlock e, in tal caso, identificare
DettagliProgrammazione concorrente
Programmazione concorrente Prof. Gerardo Pelosi & Ing. Michele Scandale 16 Ottobre 2014 Il materiale illustrato a lezione e in queste note contiene anche esempi di Fabrizio Castro, Luca Fossati, Vittorio
DettagliACSO Programmazione di Sistema e Concorrente
ACSO Programmazione di Sistema e Concorrente P3 Programmazione concorrente 2/12/2015 programmazione concorrente 1 modello di esecuzione sequenziale istruzioni eseguite in ordine predeterminabile in base
Dettagliistruzioni eseguite in ordine predeterminabile in base al codice del programma e dei valori dei dati in ingresso
Programmazione Concorrente sequenze critiche e mutua esclusione istruzioni atomiche deadlock sincronizzazione e semafori settembre 2009 programmazione concorrente 1 modello di esecuzione sequenziale istruzioni
DettagliThread: sincronizzazione Esercitazioni del 09 Ottobre 2009
Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria October 10, 2009 Sincronizzazione - 1 1 Esercizio 1: Sincronizzazione - 1 Qual è il problema
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 21 Martedì 10-01-2017 Sincronizzazione tra thread Per risolvere problemi
DettagliLibreria Linux Threads. Threads nel S.O. Linux. Primitive per la gestione dei thread. Portabilità: libreria pthreads (Posix).
Threads nel S.O. Linux Il thread è un processo leggero che può condividere uno spazio di indirizzi (o parte di esso) con il padre e gli altri processi della gerarchia cui appartiene. Realizzato a livello
DettagliEsercizi di mutua esclusione e sincronizzazione
Esercizi di mutua esclusione e sincronizzazione Alessandro A. Nacci alessandro.nacci@polimi.it ACSO 2014/2014 1 Chi sono Dottorando in Ingegneria Informatica (3 anno) Il vostro esercitatore di ACSO per
DettagliEsercitazione 2! Mutex e semafori POSIX. 3 Novembre 2016
Esercitazione 2! Mutex e semafori POSIX 3 Novembre 2016 Strumenti di sincronizzazione nella libreria LinuxThread I semafori nelle librerie pthread e LinuxThreads La libreria pthread definisce soltanto
DettagliEsercitazione 2 Sincronizzazione con semafori. 31 Ottobre 2013
Esercitazione 2 Sincronizzazione con semafori 31 Ottobre 2013 Strumenti di sincronizzazione nella libreria LinuxThread e nel linguaggio Java I semafori nelle librerie pthread e LinuxThreads La libreria
DettagliEsercizio 1 - nucleo e commutazione tra processi
Esercizio 1 - nucleo e commutazione tra processi / programma CODICE.c / int main ( ) {... fd = open( /acso/file_prova, ORDWR) pid = fork ( ); if (pid == 0) {/ codice eseguito da F1 / execl ( /acso/prog_x,
DettagliLinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads
I thread nel sistema operativo LINUX: Linuxthreads LinuxThreads: Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int
DettagliLABORATORIO DI SISTEMI OPERATIVI
LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Thread POSIX nel sistema Linux (parte
DettagliLinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads. LinuxThreads. LinuxThreads
I thread nel sistema operativo LINUX: Linuxthreads : Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int flags, void
DettagliCorso di Laboratorio di Sistemi Operativi A.A
Corso di Laboratorio di Sistemi Operativi A.A. 2016 2017 Lezione 18 Ivan Scagnetto ivan.scagnetto@uniud.it Nicola Gigante gigante.nicola@spes.uniud.it Dipartimento di Scienze Matematiche, Informatiche
DettagliSistemi operativi. Corso di Laurea Triennale in Ingegneria Informatica. Lezione 7 Mutex Condition Esempi di utilizzo
Sistemi operativi ì Corso di Laurea Triennale in Ingegneria Informatica Lezione 7 Mutex Condition Esempi di utilizzo Domande sulle lezioni passate? Sommario ì Sincronizzazione ì Mutex ì Variabili condition
DettagliCosa sono i semafori?
Semafori Cosa sono i semafori? I semafori sono primitive fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Semafori di mutua esclusione con i thread POSIX 2 Operazioni
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 19 febbraio 2013 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliSincronizzazione di thread POSIX
Sincronizzazione di thread POSIX Sincronizzazione I thread condividono la memoria Rischio di race condition Necessari meccanismi di sincronizzazione mutex (semaforo binario) condition variable I mutex
DettagliArchitetture dei Calcolatori e Sistemi Operativi
Prof. Gerardo Pelosi & Ing. Michele Scandale 23 Ottobre 2014 Gerardo Pelosi 1 Esercizio 1 Quattro amici fanno una scommessa: il vincitore sceglie casualmente a chi tocca bere
Dettagli= PTHREAD_MUTEX_INITIALIZER
MUTEX Prof.ssa Sara Michelangeli Quando si programma in modalità concorrente bisogna gestire le problematiche di accesso alle eventuali sezioni critiche. Una sezione critica è una sequenza di istruzioni
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 8 settembre 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliCosa sono i semafori?
Mutex Cosa sono i semafori? I semafori sono primitive fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Semafori di mutua esclusione con i thread POSIX 2 Operazioni
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2017-18 Pietro Frasca Lezione 13 Giovedì 16-11-2017 Variabili condizione (condition) La variabile condizione
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 22 Giovedì 12-01-2017 1 Un esempio di sincronizzazione tra thread Risolviamo
DettagliSemafori. Semafori classici con i thread POSIX 2
Semafori classici Semafori I semafori sono primitive, implementate attraverso dei contatori, fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Per queste primitive
DettagliAXO Architettura dei Calcolatori e Sistemi Operativi
olitecnico di Milano Dipartimento di Elettronica e Informazione prof.ssa Anna Antola prof. Luca Breveglieri prof. Giuseppe elagatti prof.ssa Donatella Sciuto prof.ssa Cristina Silvano AXO Architettura
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2017-18 Pietro Frasca Lezione 12 Martedì 14-11-2017 System call per l'uso dei segnali Un processo che
DettagliEsercitazione n.1! 23 Ottobre Obiettivi: Introduzione alla programmazione pthreads:
Esercitazione n.1! 23 Ottobre 2017 Obiettivi: Introduzione alla programmazione pthreads: Gestione thread posix: creazione: pthread_create terminazione: pthread_exit join: pthread_join Sincronizzazione
DettagliSincronizzazione di thread POSIX
Sincronizzazione di thread POSIX Contiene lucidi tratti da: 2006-2007 Marco Faella, Clemente Galdi, Giovanni Schmid (Università di Napoli Federico II), 2004-2005 Walter Crescenzi(Universita di Roma 3).
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 4 settembre 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 4 luglio 2014 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare tutti
DettagliI thread nel sistema operativo LINUX: Linuxthreads
I thread nel sistema operativo LINUX: Linuxthreads LinuxThreads: Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int
DettagliGESTIONE DEI PROCESSI E DEI THREADS IN UN SISTEMA LINUX (PARTE 3) 1
Pietro Pino (pepy91) GESTIONE DEI PROCESSI E DEI THREADS IN UN SISTEMA LINUX (PARTE 3) 4 July 2013 I SEMAFORI La causa della maggior parte dei bugs che coinvolgono i threads è che i threads accedono agli
DettagliSincronizzazione fra processi
Sincronizzazione fra processi Mutex Semafori 3.1 Mutex Tutte le variabili e le risorse condivise vanno protette mediante una qualche forma di sincronizzazione. Senza sincronizzazione, applicazioni concorrenti
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 16 febbraio 2016 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliEsercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013
Esercizio sul Monitor Ponte con utenti grassi e magri 11 Novembre 2013 1 Ponte con utenti grassi e magri Si consideri un ponte pedonale che collega le due rive di un fiume. Al ponte possono accedere due
DettagliThread thread lightweight process
Thread Un thread o lightweight process (LWP) è un unità di utilizzo della CPU che consiste di: un program counter, un insieme di registri, uno stack space. Tale unità condivide con gli altri peer thread
DettagliI thread nel sistema operativo LINUX: Linuxthreads
I thread nel sistema operativo LINUX: Linuxthreads LinuxThreads: Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 9 luglio 2012 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare tutti
DettagliCreazione di thread. In Linux si utilizzano le librerie pthread (POSIX thread) per lavorare con i thread:
Thread Un thread o lightweight process (LWP) è un unità di utilizzo della CPU che consiste di: un program counter, un insieme di registri, uno stack space. Tale unità condivide con gli altri peer thread
DettagliSincronizzazione. I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino
Sincronizzazione I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Introduzione Le soluzioni Software sono complesse da utilizzare dal punto di vista del programmatore
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 17 febbraio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
Dettagli" &$ () " ) ) $ ' () *) " ) $
%&! "# $ #include int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) printf("argv[%d]: %s\n", i, argv[i] ); 1 2 " &$ cc cc program.c a.out pippo pluto topolino argv[0]: a.out
Dettagliil tipo di parallelismo dipende dal grado di cooperazione
Thread Settembre 2009 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio d informazione) necessario tra attività svolte in parallelo processo macchina virtuale
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 6 settembre 2013 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliI THREAD. thread 2. thread 1
I THREAD Un thread è un singolo flusso di istruzioni, all interno di un processo, che lo scheduler può fare eseguire separatamente e concorrentemente con il resto del processo. Per fare questo uno thread
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2017-18 Pietro Frasca Lezione 10 Martedì 7-11-2017 Thread a livello kernel Modello da uno a uno La
DettagliACSO Programmazione di Sistema e Concorrente
ACSO Programmazione di Sistema e Concorrente P2 Modello Thread 2/12/2015 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio di informazione) necessario tra attività
DettagliProblemi con la concorrenza. Sincronizzazione di processi e thread (1) Problemi con la concorrenza. Il problema della concorrenza
Sincronizzazione di processi e thread (1) Problemi con la concorrenza #define NITER 1000000 int count = 0; void *ThreadAdd(void *); /*thread s function prototype */ int main(int argc, char * argv[]) pthread_t
DettagliEsercitazione E9 Sincronizzazione
Esercitazione E9 Sincronizzazione Sistemi Operativi (9 CFU), CdL Informatica, A. A. 2013/2014 Dipartimento di Scienze Fisiche, Informatiche e Matematiche Università di Modena e Reggio Emilia http://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi
DettagliEsercizio monitor con pthreads
Esercizio monitor con pthreads Si consideri la pista di pattinaggio sul ghiaccio di una località turistica montana. La pista di pattinaggio è aperta a tutti. In particolare i clienti dell impianto si suddividono
DettagliAXO Architettura dei Calcolatori e Sistemi Operativi
Politecnico di Milano Dipartimento di Elettronica, Informazione e Bioingegneria prof.ssa Anna Antola prof. Luca Breveglieri prof. Roberto Negrini prof. Giuseppe Pelagatti prof.ssa Donatella Sciuto prof.ssa
DettagliAXO Architettura dei Calcolatori e Sistemi Operativi
Politecnico di Milano Dipartimento di Elettronica e Informazione prof.ssa Anna Antola prof. Luca Breveglieri prof. Giuseppe Pelagatti prof.ssa Donatella Sciuto prof.ssa Cristina Silvano AXO Architettura
DettagliLABORATORIO DI SISTEMI OPERATIVI
LABORATORIO DI SISTEMI OPERATIVI Corso di Laurea Triennale in Ingegneria Informatica A.A. 2018/2019 Guglielmo Cola Email: g.cola@iet.unipi.it Web: iet.unipi.it/g.cola Thread POSIX nel sistema Linux (parte
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 21 settembre 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliLaboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti
Laboratorio su Programmazione Concorrente in C Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti NOTA BENE: E INSISTO!!!!! Usare il comando man nomefunzionedilibreria per ottenere
DettagliMutua esclusione. Una variabile condizione non fornisce la mutua esclusione. C'è bisogno di un mutex per poter sincronizzare l'accesso ai dati.
Mutua esclusione Una variabile condizione non fornisce la mutua esclusione. C'è bisogno di un mutex per poter sincronizzare l'accesso ai dati. Sincronizzazione Una variabile condition è sempre associata
DettagliLinuxThreads. LinuxThreads: monitor & variabili condizione
LinuxThreads Variabili Condizione LinuxThreads: monitor & variabili condizione Lo standard POSIX 1003.1c (libreria ) non implementa il costrutto Monitor ma implementa i mutex implementa le variabili
DettagliCorso: Sistemi Operativi
Sistemi Operativi Lez. 15: multithreading con Pthreads 1 Pthreads: POSIX Threads Pthreads insieme standard di funzioni C per la programmazione multithreaded IEEE Portable Operating System Interface, POSIX,
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2018-2019 Pietro Frasca Lezione 12 Giovedì 15-11-2018 Un esempio di sincronizzazione tra thread Risolviamo
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2018-2019 Pietro Frasca Lezione 9 Martedì 6-11-2018 I thread nello standard POSIX: la libreria pthreads
DettagliLinuxthreads: esercizio
Linuxthreads: esercizio Esercizio Una società di noleggio di automobili offre ai propri clienti tre tipi di automobili: piccole, medie, grandi. Ogni tipo di auto è disponibile in numero limitato (Npiccole,
DettagliMonitor pthreads. Esercizio
Monitor pthreads Esercizio Esercizio monitor Una società di noleggio di automobili offre ai propri clienti tre tipi di automobili: piccole, medie, grandi. Ogni tipo di auto è disponibile in numero limitato
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 13 luglio 2016 (Traccia A) Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine
DettagliObiettivi: Esercitazione n.1! 26 Ottobre Introduzione alla programmazione multithreaded Gestione dei thread mediante libreria pthreads:
Esercitazione n.1! 26 Ottobre 2016 Obiettivi: Introduzione alla programmazione multithreaded Gestione dei thread mediante libreria pthreads: creazione: pthread_create terminazione: pthread_exit join: pthread_join
DettagliCorso di Laboratorio di Sistemi Operativi A.A
Corso di Laboratorio di Sistemi Operativi A.A. 2016 2017 Lezione 17 Ivan Scagnetto ivan.scagnetto@uniud.it Nicola Gigante gigante.nicola@spes.uniud.it Dipartimento di Scienze Matematiche, Informatiche
DettagliEsempio: la Toilette Unisex
Esempio: la Toilette Unisex Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando i semafori forniti dalla libreria LinuxThreads, si realizzi un'applicazione concorrente
DettagliLaboratorio su Programmazione Concorrente in C. Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti
Laboratorio su Programmazione Concorrente in C Problemi classici e derivati Dalla Ottava lezione di laboratorio in avanti NOTA BENE: E INSISTO!!!!! Usare il comando man nomefunzionedilibreria per ottenere
DettagliEsercitazione [2] Concorrenza
Esercitazione [2] Concorrenza Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo
DettagliTipi di POSIX Semaphores
Semafori POSIX Sono una particolare implementazione dei semafori. Possono svolgere il ruolo di semafori binari o generali (n-ari) a seconda di quale valore viene loro assegnato all'atto della inizializzazione
DettagliAXO Architettura dei Calcolatori e Sistemi Operativi
Politecnico di Milano Dipartimento di Elettronica, Informazione e Bioingegneria prof.ssa Anna Antola prof. Luca Breveglieri prof. Roberto Negrini prof. Giuseppe Pelagatti prof.ssa Donatella Sciuto prof.ssa
DettagliSistemi Operativi. Bruschi Monga Re. Concorrenza Semafori. Sincronizzazione con monitor pthreads. Sistemi Operativi. Bruschi Monga Re.
1 Mattia Monga Lezione XVI: Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2016/17 1 cba 2008 17 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo
DettagliThread Posix. Agenda. Introduzione Libreria thread. Esempi ed esercizi
Thread Posix Agenda Introduzione Libreria thread Creazione e terminazione di thread Sincronizzazione tra thread Variabili condition cenni Esempi ed esercizi 2 Fonti POSIX Thread Programming http://www.llnl.gov/computing/tutorials/worksh
DettagliAXO Architettura dei Calcolatori e Sistemi Operativi
Politecnico di Milano Dipartimento di Elettronica e Informazione prof.ssa Anna Antola prof. Luca Breveglieri prof. Giuseppe Pelagatti prof.ssa Donatella Sciuto prof.ssa Cristina Silvano AXO Architettura
DettagliSeminario: Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.S. In Ing. Elettronica
Seminario: Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.S. In Ing. Elettronica Ing. Francesco Restuccia E-mail: f.restuccia@studenti.unipi.it Pervasive Computing & Networking Lab (PerLab)
DettagliEsercitazione [3] Sincronizzazione inter-processo
Esercitazione [3] Sincronizzazione inter-processo Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi
DettagliQualche esercizio. E. Mumolo
Qualche esercizio E. Mumolo Chiamate di sistema per la gestione processi in Linux fork, wait, waitpid, exec implementazione di grafi delle precedenze Chiamate di sistema per la gestione dei Segnali in
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 16 luglio 2015 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliLaboratorio di Sistemi Operativi
Laboratorio di Sistemi Operativi LAB5 System call per gestione semafori 2002/2003 Pagani Trentini Slide 1 Agenda Linux strutture pthread_t, sem_t pthread_create, pthread_exit, sem_init, sem_post, sem_wait,
DettagliThread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.M. In Ing. Elettronica
Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.M. In Ing. Elettronica Ing. Simone Brienza E-mail: simone.brienza@for.unipi.it Pervasive Computing & Networking Lab (PerLab) http://www.perlab.it
DettagliLinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads
I thread nel sistema operativo LINUX: Linuxthreads LinuxThreads: Caratteristiche Processi leggeri realizzati a livello kernel System call clone: int clone(int (*fn) (void *arg), void *child_stack, int
DettagliSistemi Operativi 1. Mattia Monga. a.a. 2017/18. Dip. di Informatica Università degli Studi di Milano, Italia
1 Mattia Monga Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2017/18 1 cba 2008 18 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo 4.0 Internazionale.
DettagliCorso di Laboratorio di Sistemi Operativi
Corso di Laboratorio di Sistemi Operativi Lezione 7 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu Threads Un thread è l unità di base per l utilizzo della CPU. Composto
DettagliIntroduzione ai POSIX Threads (libreria Pthread) E.Mumolo, DIA.
Introduzione ai POSIX Threads (libreria Pthread) E.Mumolo, DIA mumolo@units.it Modello implementativo dei Thread Architettura Gestiti da librerie utente Processo1 Processo2 Processo3 Processo4 Processo5
DettagliThread. Contiene lucidi tratti da: Marco Faella, Clemente Galdi, Giovanni Schmid (Università di Napoli Federico II),
Thread Contiene lucidi tratti da: 2006-2007 Marco Faella, Clemente Galdi, Giovanni Schmid (Università di Napoli Federico II), 2005-2007 Thread processi leggeri un processo può avere diversi thread i thread
Dettagli3.2 Concorrenza, parallelismo e parallelismo reale
3. PROGRAMMAZIONE CONCORRENTE 3.1 Introduzione La programmazione usuale si basa su un modello di esecuzione sequenziale, cioè sull ipotesi che le istruzioni di un programma vengano eseguite una dopo l
DettagliJAVA. import java.util.*; #include <stdio.h> public static class test { int variable; private int variable; int main (int argc, char *argv[]) {
JAVA C import javautil*; public static class test { private int variable; public void main (String[] args) { variable = 0; Systemoutprintln( Variable is: + variable); #include int variable; int
DettagliUniversità di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2016-17 Pietro Frasca Lezione 20 Giovedì 22-12-2016 Comunicazione: pipe In Unix, processi possono comunicare
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 26 giugno 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
DettagliLab. di Sistemi Operativi - Esercitazione n 9- -Thread-
Lab. di Sistemi Operativi - Esercitazione n 9- -Thread- 1 Sommario Esercizi su: Comunicazione tra processi: la funzione pipe() Condivisione dati e codice tra due o più processi: concetto di Thread 2 -
DettagliIl semaforo. Strumento linguistico di basso livello per risolvere problemi di sincronizzazione.
Il semaforo 1 Il semaforo Strumento linguistico di basso livello per risolvere problemi di sincronizzazione. Il meccanismo semaforico e` normalmente utilizzato a livello di macchina concorrente per realizzare
DettagliSistemi Operativi L-A. Esercizi 14 Giugno 2007. Esercizio monitor
Sistemi Operativi L-A Esercizi 14 Giugno 2007 Esercizio monitor Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando la libreria pthread, si realizzi un'applicazione
DettagliEsercitazione [4] Produttore/Consumatore
Esercitazione [4] Produttore/Consumatore Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo
DettagliSistemi Operativi (M. Cesati)
Sistemi Operativi (M. Cesati) Compito scritto del 14 luglio 2017 Nome: Matricola: Corso di laurea: Cognome: Crediti da conseguire: 5 6 9 Scrivere i dati richiesti in stampatello. Al termine consegnare
Dettagli