Jusqu’à présent, dans un processus, on n’a qu’un seul fil (chemin) d’exécution :

image.png

Avec les threads, il est possible d’avoir plusieurs fils qui s’exécutent simultanément.

<aside> ⚠️

Les différents threads d’un processus partagent les mêmes données.

</aside>

Si plusieurs threads utilisent les mêmes données. Il faut en général mettre en place des mécanismes d’exclusion mutuelle.

Jusqu’à présent, dans un processus, on n’a qu’un seul fil (chemin) d’exécution :


2 threads : chacun ajoute 1 à la variable :

Thread 1

lire var // 12
ajouter 1 // 13
écrire résultat

Thread 2

lire var // 12
ajouter 1 // 13
écrire résultat

Mise en œuvre

En C

#include <pthread.h>

int pthread_create(pthread_t *restrict thread,
	                 const pthread_attr_t *restrict attr,
                   void *(*start_routine)(void *),
                   void *restrict arg);

Créer et démarre un nouveau thread, en utilisant la fonction start-routine(void * → void *) qui est lancée avec arg en paramètre.

Le paramètre thread permet d’obtenir un identifiant par le thread.

Le paramètre attr permet de préciser des attributs pour le thread (NULL pour les valeurs par défaut)

Retour : 0 → succès ; ≠ 0 → échec


Le thread se termine à la fin de sa fonction, ou en appelant :

voir pthread_exit(void * retval);

retval est la valeur retournée par le thread.


On peut attendre un thread avec avec :

int pthread_join(pthread_t thread, void **retval);