Unión y separación de std::thread
Cree hilos con std::thread y elija entre join y detach.
Unión y separación de std::thread es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
La clase std::thread
La cabecera <thread> incorporó los hilos a la biblioteca estándar en C++11. Cada instancia de std::thread representa un hilo del sistema operativo.
Creación de un hilo
Pase un objeto invocable, como una función, una lambda o un functor, al constructor. El hilo comienza a ejecutarse inmediatamente.
#include <thread>
#include <iostream>
void worker() { std::cout << "running on thread\n"; }
int main() {
std::thread t(worker);
t.join(); // wait for it to finish
}Pasar argumentos
Reenvíe los argumentos al objeto invocable a través del constructor.
std::thread t([](int n) { std::cout << n; }, 42);
t.join();Pasar por referencia
Use std::ref para pasar argumentos por referencia. Sin él, el hilo recibe copias.
int counter = 0;
std::thread t([](int& c) { ++c; }, std::ref(counter));
t.join();
std::cout << counter; // 1join(): esperar a que termine
Llame a join() para bloquear el hilo que realiza la llamada hasta que termine el hilo objetivo. Después de ejecutar join, el hilo deja de ser joinable.
detach(): ejecutar de forma independiente
Llame a detach() para ejecutar el hilo de forma independiente. Seguirá ejecutándose después de que se destruya el objeto std::thread. El sistema operativo libera los recursos cuando el hilo termina.
std::thread t([]() { /* background work */ });
t.detach(); // we no longer track itjoinable()
Compruebe si el hilo se puede unir o separar. Un hilo al que se ha aplicado join o detach deja de ser joinable.
Olvidar hacer join: terminación
Si se destruye un std::thread mientras todavía es joinable, el programa llama a std::terminate. Haga siempre join o detach antes de destruirlo.
Envoltorio RAII
Escriba un pequeño envoltorio RAII que haga join en el destructor. Como alternativa, use std::jthread (C++20), que hace join automáticamente.
#include <thread>
// C++20
std::jthread t([] { /* work */ });
// t joins automatically when destroyedConcurrencia del hardware
Consulte el número de hilos de hardware con std::thread::hardware_concurrency(). Úselo para dimensionar los grupos de hilos.
Identificadores de hilos
Cada hilo tiene un identificador único. Obtenga el ID del hilo actual con std::this_thread::get_id().
Pausar un hilo
Use std::this_thread::sleep_for(duration) para pausar el hilo actual.
#include <chrono>
using namespace std::chrono_literals;
std::this_thread::sleep_for(500ms);Comprobación rápida
¿Qué sucede si se destruye un std::thread joinable antes de llamar a join() o detach()?
Resumen
Cree hilos con std::thread y un objeto invocable. Haga siempre join() o detach() antes de destruir el objeto hilo; como alternativa, use std::jthread (C++20), que hace join automáticamente.
Preguntas frecuentes
¿La lección «Unión y separación de std::thread» es gratis?
Sí — el texto completo de «Unión y separación de std::thread» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Unión y separación de std::thread»?
Cree hilos con std::thread y elija entre join y detach. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Unión y separación de std::thread»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Unión y separación de std::thread
- std::mutex, lock_guard y unique_lock
- Variables de condición y patrones de trabajadores
- Conceptos básicos de std::async y std::future