Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D La Corte in Rete
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Antonino Mazzeo » 21.Esercitazione: Posix Threads


Sommario

  • Introduzione
  • Processi e Thread
  • Modelli di programmazione multithread
  • PThreads APIs

Introduzione

  • Un thread, o processo leggero, è un flusso di controllo sequenziale di un programma.
  • La coppia processo+threads realizza la separazione tra concorrenza e protezione.
  • Nei sistemi Unix, un thread:
    • Esiste all’interno di un processo e usa le sue risorse
    • Possiede il suo flusso di controllo indipendente
    • Può condividere le risorse del processo con altri thread, che eseguono in maniera indipendente o dipendente
  • Dal punto di vista di un programmatore, un thread può essere visto come una procedura che viene eseguita indipendentemente dal programma principale.

Processi e Thread

  • I processi contengono informazioni sulle risorse del programma e lo stato di esecuzione
  • I thread possono essere schedulati ed eseguiti indipendentemente perché possiedono i loro registri, le loro proprietà di scheduling, i loro segnali pendenti e i loro dati specifici
  • I thread che eseguono in uno stesso processo condividono le risorse del processo
  • Tipici modelli di programmazione multithread: Manager/Workers, Pipeline e Peer
Schema esplicativo (processo/thread)

Schema esplicativo (processo/thread)


PThreads

  • Breve storia:
    • Diverse librerie proprietarie per la gestione dei thread implementate da diversi produttori di hardware;
    • Forte eterogeneità tra le varie librerie.
    • Bisogno di un interfaccia standard.
    • Per i sistemi UNIX tale interfaccia fu specificata nel 1995 con lo standard IEEE POSIX 1003.1c (PThreads).
  • I PThreads sono stati definiti come un insieme di tipi e procedure implementate in C
  • Sono composti da un file pthread.h e una libreria
  • PThread APIs: Gestione dei Thread, Gestione dei Mutex, Gestione delle Condition Variables

PThread APIs: Gestione dei Thread

  • Creazione di un Thread
    • pthread_create (thread,attr,start_r,arg)
  • Terminazione di un Thread
    • Un thread può terminare per diversi motivi; la starting routine termina la sua esecuzione; il thread chiama la pthread_exit(); il thread è cancellato da un altro thread con pthread_cancel(); l’intero processo termina.
      • pthread_exit (status)
    • Usata per terminare un thread esplicitamente.
  • Join: è un modo per sincronizzare più thread
  • La chiamata pthread_join(threadId, status) blocca il chiamante finché il thread threadId specificato non termina

PThread APIs: Gestione di Mutex

  • pthread_mutex_init (mutex,attr)
    • Crea un nuovo mutex e lo inizializza come “sbloccato” (unlocked).
  • pthread_mutex_destroy (mutex)
    • Distrugge un mutex che non serve più.
  • pthread_mutex_lock (mutex)
    • Un thread invoca la lock su un mutex per acquisire l’accesso in mutua esclusione alla sezione critica. Se il mutex è già acquisito da un altro thread, il chiamante si blocca in attesa di un unlock.
  • pthread_mutex_trylock (mutex)
    • Analoga alla lock, ma non bloccante. Se il mutex è già acquisito, ritorna immediatamente con un codice di errore EBUSY.
  • pthread_mutex_unlock (mutex)
    • Un thread invoca la unlock su un mutex per rilasciare la sezione critica, consentendo l’accesso ad un altro thread

Condition Variables (CV)

  • Rappresentano ancora un altro mezzo di sincronizzazione, oltre che i Join e i mutex
  • La sincronizzazione con CV si basa sui valori correnti dei dati
  • Vanno usate in congiunzione con un mutex (costrutto Monitor)
  • pthread_cond_init (condition,attr)
    • Crea una nuova CV e lo inizializza come “sbloccato” (unlocked).
  • pthread_cond_destroy (condition)
    • Distrugge una CV che non serve più.
  • pthread_cond_wait (condition,mutex)
    • Blocca il thread chiamante finché non si invoca la signal sulla CV specificata.
  • pthread_cond_signal (condition)
    • Serve a risvegliare un thread precedentemente bloccato sulla CV.

Prossima lezione

Gestione della memoria

I materiali di supporto della lezione

Posix Threads

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion

Fatal error: Call to undefined function federicaDebug() in /usr/local/apache/htdocs/html/footer.php on line 93