next up previous contents index return to home!
Next: Esempio di creazione di Up: Generalità sui Thread Previous: Generalità sui Thread   Indice   Indice analitico


Creazione dei Thread

Per supportare il meccanismo dei thread lo standard Posix definisce innanzitutto un nuovo tipo di dato che è il pthread_t . Tale nuovo tipo di dato serve per contenere l'identificatore che Unix assegna in modo univoco ad ogni thread.

Ogni processo prima di iniziare la fase di creazione di uno o più thread deve comunicare al nucleo il numero di thread da creare detto concurrency level. Ciò è fatto invocando la routine :



#include<pthread.h>

int pthread_setconcurrency (int nThread);


Argomenti in ingresso :

nThread
- Numero dei thread che si vogliono creare.

Valore restituito :

0
- In caso di successo.
${\bf\neq 0}$
- In caso di insuccesso.

Un thread è creato invocando la seguente routine del nucleo :



#include<pthread.h>


int pthread_create (pthread_t *tid, const p_thread_attr*attr, 

(void *(*func)(void *), void *arg);


Argomenti in ingresso :

tid
- Al ritorno dalla chiamata contiene l'ID del thread
attr
- Valori passati dell'utente per gli attributi del thread. Nel caso si volessero utilizzare quelli di default si deve passare il valore NULL.
func
- È la funzione che contiene il codice del thread.
arg
- Parametro opzionale da passare al thread. È un puntatore alla zona di memoria che contiene i dati.

Valore restituito :

0
- In caso di successo.
${\bf\neq 0}$
- In caso di insuccesso.

Un volta creato un thread può esserci la necessità di sincronizzarsi con il suo istante di terminazione, cioè sospendersi finché il thread non è terminato. Questo è fatto tramite la funzione di nucleo :



#include<pthread.h>

int pthread_join (pthread_t tid, void **status);


Argomenti in ingresso :

tid
- Identificatore del thread sul cui momento di fine ci si vuole sincronizzare.
status
- Puntatore all'area di memoria in cui viene salvato il valore retirtuito dal thread.

Valore restituito :

0
- In caso di successo.
${\bf\neq 0}$
- In caso di insuccesso.

Tale funzione ritorna al chiamante solo una volta che il thread il cui ID è passato nel parametro tid ha terminato la sua esecuzione. Il nucleo conserva le informazioni su un thread che ha terminato la sua esecuzione fino a quando su quest'ultimo non viene eseguita una pthread_join. Questo serve, per esempio, per evitare che un thread si blocchi indefinitamente aspettando un altro thread che ha già terminato la sua esecuzione.

La funzione pthread_kill, serve per mandare un segnale software a un thread. Il nome della funzione è giustificato dal fatto che in genere tale funzione viene usata per inviare un segnale di terminazione. Il problema delle segnalazioni software a un thread o a un task sarà affrontato più approfonditamente in seguito.



#include<pthread.h>

int pthread_kill (pthread_t tid, intsigno);


Argomenti in ingresso :

tid
- Identificatore del thread a cui si vuole inviare il segnale software.
signo
- Identificatore del segnale che si vuole inviare.

Valore restituito :

0
- In caso di successo.
${\bf\neq 0}$
- In caso di insuccesso.


next up previous contents index
Next: Esempio di creazione di Up: Generalità sui Thread Previous: Generalità sui Thread   Indice   Indice analitico
Giuseppe Lipari 2002-10-27