Los hilos (threads) y la programación concurrente son fundamentales para crear aplicaciones que puedan realizar múltiples tareas simultáneamente. Vamos a explorar cómo trabajar con hilos y procesos concurrentes en C++.
Paso 1: Incluir las Bibliotecas Necesarias
#include <iostream>
#include <thread>
Paso 2: Crear un Hilo
Utiliza la clase `std::thread` para crear un hilo. Puedes hacerlo proporcionando una función para ejecutar en paralelo.
void miFuncion() {
std::cout << "Este es un hilo en ejecución." << std::endl;
}
int main() {
// Crear un hilo
std::thread miHilo(miFuncion);
// Esperar a que el hilo termine
miHilo.join();
std::cout << "Hilo principal finalizado." << std::endl;
return 0;
}
Paso 3: Pasar Argumentos a un Hilo
Puedes pasar argumentos a la función que se ejecutará en paralelo.
void funcionConArgumento(int valor) {
std::cout << "El argumento pasado es: " << valor << std::endl;
}
int main() {
int argumento = 42;
std::thread hiloConArgumento(funcionConArgumento, argumento);
hiloConArgumento.join();
return 0;
}
Paso 4: Trabajar con Datos Compartidos
Es importante tener cuidado al acceder a datos compartidos desde varios hilos. Utiliza `std::mutex` para asegurar un acceso seguro a datos compartidos.
#include <mutex>
std::mutex mtx;
void funcionConDatosCompartidos(int& contador) {
for (int i = 0; i < 5; ++i) {
mtx.lock();
std::cout << "Contador: " << contador++ << std::endl;
mtx.unlock();
}
}
int main() {
int contador = 0;
std::thread hilo1(funcionConDatosCompartidos, std::ref(contador));
std::thread hilo2(funcionConDatosCompartidos, std::ref(contador));
hilo1.join();
hilo2.join();
return 0;
}
Paso 5: Gestionar Concurrencia
Utiliza herramientas como `std::mutex`, `std::unique_lock`, `std::condition_variable`, etc., para gestionar la concurrencia de manera segura.
La programación multihilo en C++ requiere un manejo cuidadoso de los datos compartidos y una sincronización adecuada para evitar condiciones de carrera y otros problemas relacionados con la concurrencia.