Les pthreads sont fréquemment utilisés pour la programmation des threads, pour lesquels ils fournissent le nécessaire, mais aussi la protection des données. Cependant, si la bibliothèque pthread s'utilise facilement en C, il est parfois un peu difficile de faire des choses propres avec en C++. Je propose ici une solution : un objet PThread s'appuyant sur la lib pthread et fournissant les méthodes nécessaires pour l'utiliser. Cet objet nécessite qu'on lui passe, au moment où l'on souhaite threader une fonction, un pointeur sur celle-ci. Il est plus courant de créer un objet dérivant de la classe gérant le thread, et d'implémenter une méthode run(), mais j'ai préféré ce système car j'utilise cette classe dans un projet où il était plus agréable d'avoir un objet PThread, et de pouvoir lancer un thread facilement, en passant une fontion en paramètre, plutôt que de créer une nouvelle classe à chaque fois. Il est aussi possible de passer une méthode d'une autre classe en paramètre, mais il faut que celle-ci soit décalrée en static. La classe permet en plus connaitre le status du thread, de l'arreter, ou de l'attendre.

Vous trouverez un exemple dans les fichiers joints au billet. pthread.cpp et pthread.h décrivent l'objet PThread, et le main.cpp un exemple d'utilisation. N'hésitez pas à poser des questions dans les commentaires si besoins. Je sais bien que la classe est loin d'être complète, mais elle propose un bon exemple pour aborder les pthread en C++.

Pour compiler l'exécutable, dans le dossier contenant les trois fichiers sources, tapez

$ g++ -o thread main.cpp pthread.cpp -lpthread

Enfin pour l'exécuter, tapez

./thread

Vous verez cinq compteurs s'exécuter en parrallèle.


Fabien (eponyme)