Un thread è una linea di esecuzione assestante all’interno di un processo che comprende un identificatore, un program counter, un set di registri ed uno stack, e condivide con gli altri thread che appartengono allo stesso processo la sezione di codice, quella dei dati e altre risorse del sistema operativo come i file aperti ed i segnali. Solitamente un programma presenta un solo thread principale, ma nel caso in cui si utilizzi una programmazione concorrente quest’ultimo può avere più linee di esecuzione e di conseguenza eseguire più attività contemporaneamente.
La concorrenza può essere di due tipi:
- reale, cioè nel computer sono presenti più processori o core
- simulata che prevede una tecnica basata su quanti di tempo e uno scambio continuo trai thread
I benefici che si possono ottenere da questo tipo di programmazione sono moltissimi: prontezza di risposta, condivisione di risorse, minor tempo di calcolo e molti altri.
In questo articolo andremo a vedere nel dettaglio come creare ed attendere la terminazione di un thread in ambiente linux utilizzando la libreria pthread (per la compilazione è necessario aggiungere il parametro -lpthread)
#include <stdio.h>
#include <pthread.h>
void *thread(void*p){
printf("sono un thread");
}
int main(){
pthread_t T;
pthread_create(&T,NULL,&thread,NULL);
pthread_join(T,NULL);
return 0;
}
L’esempio mostra come creare un thread ed associare ad esso una funzione. La funzione pthread_join serve ad attendere la terminazione di questo.
La funzione per creare thread permette anche di passare alcuni parametri alla funzione, ecco come fare:
#include <stdio.h>
#include <pthread.h>
void *thread(void*p){
int N=(int)p;
printf("parametro %d",N);
}
int main(){
pthread_t T;
int N=100;
pthread_create(&T,NULL,&thread,(void *)N);
pthread_join(T,NULL);
return 0;
}
Grazie a questi semplici esempi siete già in grado di creare ottimi programmi multithreading. A breve verranno analizzate anche le problematiche che possono nascere da questo tipo di programmazione.

