0Pricing
C++ Academy · Lección

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;   // 1

join(): 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 it

joinable()

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 destroyed

Concurrencia 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

  1. Unión y separación de std::thread
  2. std::mutex, lock_guard y unique_lock
  3. Variables de condición y patrones de trabajadores
  4. Conceptos básicos de std::async y std::future
← Volver a C++ Academy