Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Librairie <threads.h> (C11)

La fonction thrd_create


Accès rapide :
Qu'est-ce qu'un thread ?
Le contenu de la librairie <threads.h>
La gestion des threads
La synchronisation des threads
La gestion des « thread-local storages »
Les variables de condition
Les tutoriels en vidéos

Qu'est-ce qu'un thread ?

Un thread est une unité d'exécution qui s'exécute en parallèle des autres threads de votre processus (de votre programme). Au démarrage un processus lance un premier thread : il a pour objectif d'exécuter votre main. Mais il est possible de démarrer d'autres threads pour réaliser des traitements en parallèle. Cela est d'autant plus important que nos processeurs modernes proposent plusieurs coeurs : il est donc normal de vouloir exploiter toute la puissance de ces processeurs.

Il est important de comprendre que deux processus sont isolés, en termes de zones mémoires : le premier processus ne peut donc pas manipuler la mémoire du second processus. Par contre, tous les threads d'un même processus partagent la même zone de mémoire.

Depuis sa version ISO 2011, le langage C propose l'entête <threads.h> : elle propose une API portable (compatible Unix/Linux/Windows) pour manipuler des threads dans votre programme. Avant C11 il était possible de manipuler des threads, mais il fallait passer par les APIs proposées par chaque système d'exploitation. Par exemple, vous pouviez utiliser la librairie pthread (Posix Thread) sous système Unix/Linux.

Le contenu de la librairie <threads.h>

Le contenu de ce fichier est répartie en quatre catégories d'éléments :

La gestion des threads

Nom Type Description
thrd_busy constante Associée à une erreur due à une ressource temporairement non disponible.
thrd_create Function Cette fonction permet de créer un nouveau thread.
thrd_current Function Cette fonction renvoit l'identifiant du thread courant.
thrd_detach Fonction Permet de détacher un thread.
thrd_equal Fonction Cette fonction vérifie si deux variables d'identifiants de threads (type thrd_t) sont associées au même thread ou non.
thrd_error constante Associée à une erreur, sans plus de précision.
thrd_exit Fonction Termine le thread appelant cette fonction.
thrd_join Fonction Cette fonction permet d'attendre la fin d'exécution d'un thread et de récupérer son code de sortie.
thrd_nomem Constante Indique une erreur pour cause de manque de mémoire.
thrd_sleep Fonction Cette fonction bloque le thread courant pendant un certain temps.
thrd_start_t Type Un type « pointeur sur fonction » associé à la signature d'une fonction de démarrage de thread.
thrd_success constante Associée à une sortie en succés.
thrd_t Type Ce typedef définit un type « identifiant de thread ».
thrd_timeout constante Associée à une erreur de dépassement de délai.
thrd_yield Fonction Rend la main à l'ordonnanceur de tâches, pour cette la tranche de temps courante.

La synchronisation des threads

Les éléments suivantes permettent de gérer la notion de Mutex (MUTual EXclusion). Un mutex permet de garantir des accès synchronisés à des ressources manipulées simultanément par plusieurs threads.

Nom Type Description
call_once Fonction Cette fonction permet l'appel d'une autre fonction qu'une seule et unique fois.
mtx_destroy Fonction Permet de détruire un mutex.
mtx_init Fonction Permet d'intialiser un mutext (MUTual EXclusion).
mtx_lock Fonction Permet de verrouiller un mutex.
mtx_plain Constante Identifie un mutex standard.
mtx_recursive Constante Identifie un mutex réentrant.
mtx_t Type Ce type représente la notion mutex (MUTual EXclusion).
mtx_timed Constante Identifie un mutex avec une durée de blocage limitée.
mtx_timedlock Fonction Permet de verrouiller un mutex sur une durée de temps limitée.
mtx_trylock Fonction Tente de verrouiller un mutex, mais ne bloque pas si celui-ci est déjà verrouillé.
mtx_unlock Fonction Permet de libérer un mutex
once_flag Structure Utilisée par la fonction call_once pour garantir qu'une fonction ne soit qu'une seule et unique fois.
ONCE_FLAG_INIT Constante Valeur d'initialisation d'une structure de données de type once_flag.

La gestion des « thread-local storages »

Nom Type Description
thread_local Type
tss_create Function
tss_delete Fonction
TSS_DTOR_ITERATIONS Constante
tt_dtor_t Type
tss_get Fonction
tss_set Fonction
tss_t Type

Les variables de condition

Nom Type Description
cnd_broadcast Fonction
cnd_destroy Fonction
cnd_init Fonction
cnd_signal Fonction
cnd_t Type
cnd_timedwait Fonction
cnd_wait Fonction

Les tutoriels en vidéos


Introduction à la programmation
multi-threads avec le langage C

Attendre la terminaison d'un thread
via la fonction thrd_join

Programmation multi-threads et
gestion des accès concurrents