Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: digimikeh en 8 Julio 2020, 04:29 am



Título: Hilos
Publicado por: digimikeh en 8 Julio 2020, 04:29 am
Buenas noches...

Entiendo a modo muy general el tema de los hilos...
Al ejecutar el programa no está ejecutando ambos hilos al mismo tiempo, sino que ejecuta h1, espera a que termine y luego ejecuta h2... como logro que se ejecuten ambos a la vez?, entiendo que debo usar mutex para que no haya resultado inesperado con std::cout lo tengo en cuenta.. pero independiente de eso, mi objetivo es ejecutar los dos hilos a la vez. Saludos y gracias.


Código:
#include <iostream>
#include <thread>

int main(){
    std::thread h1(
                [](){ for (short x{0}; x != 11; ++x) std::cout << x << std::endl; }
    );
    h1.join();
   
    std::thread h2(
                [](){ for (short x{90}; x != 101; ++x) std::cout << x <<std::endl; }
                );
    h2.join();

    return 0;
}


Título: Re: Hilos
Publicado por: ThunderCls en 8 Julio 2020, 05:13 am
Exactamente el objetivo que persiguen los hilos es lograr una ejecucion concurrente (varias porciones de codigo ejecutandose al "mismo tiempo"). std::thread::join es una funcion que se usa para bloquear el hilo en la linea desde la cual es llamada y esperar a que el hilo al que se esta "joining" termine la ejecucion antes de continuar con el resto de la funcion principal. En este caso creo que es lo opuesto a lo que deseas hacer, o sea ejecutar dos porciones de codigo simultaneamente.

En tu caso moviendo h1.join(); justo despues de h2.join(); garantiza que ambos hilos se ejecuten concurrentemente. La funcion main a su vez espera que ambos concluyan antes de terminar su ejecucion.

Si te vas a adentrar en el tema de la programacion concurrente te aconsejo empezar conociendo conceptos basicos como: secciones criticas, race conditions, deadlocks, livelock, exclusion mutua (semaforos, mutex, etc)
Saludos


Título: Re: Hilos
Publicado por: digimikeh en 9 Julio 2020, 02:17 am
Hola!
gracias por la respuesta...

Efectivamente ahi corrieron los dos hilos simultaneamente...

Aprovecho la instancia para preguntar: Por qué en Linux este codigo no funciona?

El mensaje que obtengo del compilador es:

/usr/include/c++/8/thread:127: error: undefined reference to `pthread_create'

Saludos y agradecido nuevamente.


Título: Re: Hilos
Publicado por: ThunderCls en 9 Julio 2020, 13:56 pm
Asegúrate que estas compilando con -pthread


Título: Re: Hilos
Publicado por: digimikeh en 9 Julio 2020, 17:19 pm

Actualmente utilizo Qt Creator como IDE por lo que tengo que buscar en alguna parte donde meter el flag..

Gracias estimado por la gran ayuda..

Saludos cordiales.