Boost.Thread pour C++ : guide complet avec exemples
1. Qu'est-ce que Boost.Thread et pourquoi l'utiliser ?
Boost.Thread est une bibliothèque puissante et mature faisant partie des Boost C++ Libraries. Elle offre des outils portables (multi-plateformes) pour la programmation multithread. Apparue bien avant que la norme C++11 n'introduise son propre module <thread>, elle reste très utilisée grâce à sa flexibilité, son riche ensemble d'outils et sa compatibilité avec les anciens compilateurs. Cette bibliothèque permet de créer et gérer des threads, synchroniser l'accès aux données partagées, utiliser des verrous, des variables conditionnelles, des barrières, des sémaphores, des pools de threads et bien plus encore.
Pourquoi utiliser Boost.Thread alors que la bibliothèque standard existe ? D'abord, Boost.Thread propose des primitives supplémentaires absentes du standard C++ (comme barrier, future avec support de when_any, thread_group). Ensuite, son API est plus riche pour la gestion des threads (possibilité de définir la pile, la priorité, le nom). Enfin, Boost.Thread garantit la portabilité du code entre différentes plateformes (Windows, Linux, macOS) et compilateurs (MSVC, GCC, Clang), ce qui est crucial pour les grands projets. Boost.Thread est également très présent dans les projets legacy où la migration vers C++11/17/20 est difficile.
Sur le site éducatif PythonLib, nous considérons Boost.Thread comme un excellent exemple de bibliothèque "industrielle" pour le multithreading en C++. Elle enseigne la gestion correcte des ressources partagées, aide à éviter les deadlocks et les race conditions, et illustre les patterns de conception d'applications multithread.
2. Installation
Boost.Thread ne s'installe pas via pip, npm ou cargo — c'est une bibliothèque C++ qui s'installe avec Boost. Voici les commandes précises pour différents systèmes.
Linux (Ubuntu/Debian)
sudo apt-get update
sudo apt-get install libboost-all-dev
macOS (Homebrew)
brew install boost
Windows (vcpkg)
vcpkg install boost-thread
Windows (compilation manuelle)
Téléchargez Boost depuis le site officiel, décompressez et exécutez :
bootstrap.bat
.\b2 --with-thread
Compilation avec CMake (exemple)
Dans votre CMakeLists.txt :
find_package(Boost REQUIRED COMPONENTS thread)
target_link_libraries(votre_cible PRIVATE Boost::thread)
3. Démarrage rapide — exemple minimal fonctionnel
Créez un fichier main.cpp :
#include <iostream>
#include <boost/thread.hpp>
void hello() {
std::cout << "Bonjour depuis le thread ! ID du thread : "
<< boost::this_thread::get_id() << std::endl;
}
int main() {
boost::thread t(hello);
t.join(); // Attend la fin du thread
std::cout << "Thread principal terminé." << std::endl;
return 0;
}
Compilez et exécutez :
g++ main.cpp -lboost_thread -lboost_chrono -pthread -o main
./main
Sortie (l'ID du thread sera différent) :
Bonjour depuis le thread ! ID du thread : 0x7f8b9c0b9700
Thread principal terminé.
4. Méthodes/fonctions/classes principales
4.1. boost::thread — création et gestion des threads
Signature :
explicit thread(const boost::function0<void>& thread_function);
void join();
void detach();
bool joinable() const;
Fonctionnement : La classe boost::thread représente un thread d'exécution distinct. Le constructeur prend un objet appelable