Traitement multithreads
Threads - Modèle
Les threads sont également une abstraction très populaire dans la programmation moderne
Ils offrent une exécution parallèle de plusieurs co-routines à l’intérieur d’un même espace adressable.
Chaque thread est défini par :
PID
: Process identifierTID
: Thread identifier
Dans cet espace virtuel fourni par le processus parent, chaque thread dispose de sa propre pile (stack)
Au niveau du noyau Linux, chaque thread est vue comme un processus léger (light weight process - LWP)
Avantages et inconvénients
Avantages
- Nécessitent moins de ressources
- Changement de contexte plus simple et plus rapide
- Communication entre thread moins compliquée
- Variables globales accessibles par tous les threads
Inconvénients
- Protection des actions critiques plus complexe
- Protection des sections critiques plus complexe
- Variables globales accessibles par tous les threads
- → Race conditions
Grâce à la bibliothèque pthread de POSIX, Linux offre une longue liste de services pour la gestion des threads, ici quelques services intéressants :
service | syscall |
---|---|
Création d’un thread | pthread_create |
Suppression d’un thread | pthread_cancel |
Terminaison d’un thread | pthread_exit |
Attente sur la terminaison d’un thread | pthread_join |
Envoi d’un signal à un thread | pthread_kill |
Gestion de l’état de suppression | pthread_setcancelstate |
Gestion du type de suppression | pthread_setcanceltype |
Ajout de méthodes de nettoyage | pthread_cleanup_push |
Suppression de méthodes de nettoyage | pthread_cleanup_pop |
Commandes pour afficher la liste des threads :
ps -eLf
ps H -o user,ppid,pid,tid,stat,cmd,comm,wchan
Synchronization
La bibliothèque pthread propose également des services de synchronisation et de gestion de sections critiques entre threads d’un même processus, ici quelques services intéressants :
service pour les mutex | syscall |
---|---|
Création d’un mutex | pthread_mutex_init |
Destruction d’une mutex | pthread_mutex_destroy |
Prise d’une mutex | pthread_mutex_lock |
Libération d’une mutex | pthread_mutex_unlock |
service pour Variables conditionnelles | syscall |
---|---|
Création d’une variable | pthread_cond_init |
Destruction d’une variable | pthread_cond_destroy |
Attente d’une condition | pthread_cond_wait |
Signalisation d’une condition | pthread_cond_signal |
Il est bien évident que les autres mécanismes de communications proposés aux processus sont également disponibles au niveau des threads, par exemple les sémaphores, les sockets, etc.