Programmazione concorrente in linux [POSIX C]

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 <stdlib.h>
#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 <stdlib.h>
#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.

Be Sociable, Share!