Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
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