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
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 ce fichier est répartie en quatre catégories d'éléments :
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. |
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 . |
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 |
Nom | Type | Description |
---|---|---|
cnd_broadcast | Fonction | |
cnd_destroy | Fonction | |
cnd_init | Fonction | |
cnd_signal | Fonction | |
cnd_t | Type | |
cnd_timedwait | Fonction | |
cnd_wait | Fonction |
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 :