Boost.Thread para C++: guía completa con ejemplos prácticos
1. ¿Qué es y por qué usarla?
Boost.Thread es una biblioteca potente y madura del conjunto Boost C++ Libraries, que proporciona herramientas portables (multiplataforma) para trabajar con multihilo. Apareció mucho antes de que el estándar C++11 introdujera su propio módulo <thread>, y sigue siendo muy utilizada gracias a su flexibilidad, su amplio conjunto de herramientas y su compatibilidad con compiladores antiguos. La biblioteca permite crear y gestionar hilos, sincronizar el acceso a datos compartidos, usar bloqueos, variables de condición, barreras, semáforos, grupos de hilos y mucho más.
¿Por qué usar Boost.Thread si ya existe la biblioteca estándar? Primero, Boost.Thread ofrece primitivas adicionales que no están en el estándar de C++ (como barrier, future con soporte para when_any, thread_group). Segundo, tiene una API más rica para la gestión de hilos (por ejemplo, la posibilidad de definir el tamaño de la pila, la prioridad o el nombre del hilo). Tercero, Boost.Thread garantiza la portabilidad del código entre diferentes plataformas (Windows, Linux, macOS) y compiladores (MSVC, GCC, Clang), algo fundamental para proyectos grandes. Por último, Boost.Thread se usa activamente en proyectos heredados donde migrar a C++11/17/20 es complicado.
En el sitio educativo PythonLib, consideramos Boost.Thread como un excelente ejemplo de cómo es una biblioteca "industrial" para multihilo en C++. Enseña a trabajar correctamente con recursos compartidos, ayuda a evitar interbloqueos y condiciones de carrera, y demuestra patrones de diseño para aplicaciones multihilo.
2. Instalación
Boost.Thread no se instala con pip, npm o cargo; es una biblioteca de C++ que se instala junto con Boost. A continuación, los comandos exactos para diferentes sistemas.
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 (compilación manual)
Descarga Boost desde el sitio oficial, descomprímelo y ejecuta:
bootstrap.bat
.\b2 --with-thread
Compilación con CMake (ejemplo)
En tu archivo CMakeLists.txt:
find_package(Boost REQUIRED COMPONENTS thread)
target_link_libraries(tu_proyecto PRIVATE Boost::thread)
3. Inicio rápido — ejemplo mínimo funcional
Crea un archivo main.cpp:
#include <iostream>
#include <boost/thread.hpp>
void hola() {
std::cout << "¡Hola desde el hilo! ID del hilo: "
<< boost::this_thread::get_id() << std::endl;
}
int main() {
boost::thread t(hola);
t.join(); // Esperamos a que el hilo termine
std::cout << "Hilo principal finalizado." << std::endl;
return 0;
}
Compila y ejecuta:
g++ main.cpp -lboost_thread -lboost_chrono -pthread -o main
./main
Salida (el ID del hilo será diferente):
¡Hola desde el hilo! ID del hilo: 0x7f8b9c0b9700
Hilo principal finalizado.
4. Métodos/funciones/clases principales
4.1. boost::thread — creación y gestión de hilos
Firma:
explicit thread(const boost::function0<void>& funcion_del_hilo);
void join();
void detach();
bool joinable() const;
Qué hace: La clase boost::thread representa un hilo de ejecución independiente. El constructor acepta un objeto invocable