Autor
|
Tema: Ayuda con hilos en C (Leído 5,803 veces)
|
snake_linux
Desconectado
Mensajes: 70
|
Hola a tod@s, ahora estoy aprendiendo a manejar lo básico de los hilos en C, resulta que tengo este código: #include <stdio.h> #include <string.h> #include <malloc.h> #include <pthread.h> void * funcion(void *); int main() { pthread_t idhilo; int a=5; pthread_create(&idhilo, NULL, funcion, &a); // pthread_join(idhilo, NULL); int y; for(y =0;y <5;y ++) printf("hilo principal\n"); } void * funcion(void * a) { int x; for(x =0;x <5;x ++) printf("Se está ejecutando el hilo\n"); }
Si descomento la linea 14, se ejecuta el hilo y el hilo principal se queda en segundo plano, si está comentada el hilo no llega a ejecutarse, en teoría, por lo que he leido pthread_join() sirve para mantener el hilo padre en espera hasta que el hilo hijo termine su ejecución, pero yo lo que quiero es que se ejecuten los dos hilos a la vez, ya que creo que eso es la finalidad de usar hilos. Gracias de antemano. Saludos.
|
|
« Última modificación: 28 Agosto 2015, 00:06 am por snake_linux »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Join hace lo que dices, esperar a que acabe el hilo. Si no lo pones, no espera.
|
|
|
En línea
|
|
|
|
snake_linux
Desconectado
Mensajes: 70
|
Join hace lo que dices, esperar a que acabe el hilo. Si no lo pones, no espera.
Ya, no espera, pero se supone que si no usas join, ¿ se ejecutarían a la vez no?, es que si comento el join, el hilo ni siquiera llega a ejecutarse.
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Con el join comentado, funciona correctamente.
|
|
|
En línea
|
|
|
|
snake_linux
Desconectado
Mensajes: 70
|
Con el join comentado, funciona correctamente.
Compilar compila, y también arranca, pero no se ejecuta el for con el printf del hilo hijo, lo compilo con: gcc pruebas.c -o pruebas -lpthread
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
El for se ejecuta correctamente.
Coloca el join al final del hilo principal para evitar que se cierre el programa con el hilo abierto.
|
|
|
En línea
|
|
|
|
snake_linux
Desconectado
Mensajes: 70
|
El for se ejecuta correctamente.
Coloca el join al final del hilo principal para evitar que se cierre el programa con el hilo abierto.
A lo que me refiero, es que comentando el join, es decir, teniendo este código: #include <stdio.h> #include <string.h> #include <malloc.h> #include <pthread.h> void * funcion(void *); int main() { pthread_t idhilo; int a=5; pthread_create(&idhilo, NULL, funcion, &a); int y; for(y =0;y <5;y ++) printf("hilo principal\n"); } void * funcion(void * a) { int x; for(x =0;x <5;x ++) printf("Se está ejecutando el hilo\n"); }
La salida que me genera es: hilo principal hilo principal hilo principal hilo principal hilo principal Cuando debería ser: hilo principal se está ejecutando el hilo hilo principal se está ejecutando el hilo .... Ya que en teoria los threads sirven para tener dos hilos de ejecución al mismo tiempo, si no, no le veo la diferencia entre esto y llamar a una función.
|
|
|
En línea
|
|
|
|
kondrag_X1
Desconectado
Mensajes: 157
|
a ver no soy un esperto y alojemos digo una tontería pero no creo que eso sea así: ami entender seria: hilo principal hilo principal hilo principal hilo secundario hilo principal hilo principal hilo secundario
porque si el hilo secundario intenta acceder al recurso que esta utilizan el hilo principal en ese momento no va a poder. no se si me explico, con claridad.
|
|
|
En línea
|
|
|
|
snake_linux
Desconectado
Mensajes: 70
|
a ver no soy un esperto y alojemos digo una tontería pero no creo que eso sea así: ami entender seria: hilo principal hilo principal hilo principal hilo secundario hilo principal hilo principal hilo secundario
porque si el hilo secundario intenta acceder al recurso que esta utilizan el hilo principal en ese momento no va a poder. no se si me explico, con claridad. ¿ Entonces es por eso ? Por que con printf intentan acceder ambos a la vez a stdout ?
|
|
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
Lo peor que podría pasar es que se mezclasen las salidas.
Pon el join al final del main, y mira si la salida es igual.
En caso de que la salida siga siendo incorrecta, comprueba si el thread se ejecuta.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Sockets y Hilos ?? !!! AYUDA
Programación C/C++
|
<<<-Basura->>>
|
7
|
6,515
|
11 Diciembre 2011, 09:42 am
por <<<-Basura->>>
|
|
|
ayuda con hilos
Java
|
luisdoros
|
0
|
1,235
|
14 Julio 2012, 16:56 pm
por luisdoros
|
|
|
ayuda con hilos
Java
|
luisdoros
|
1
|
5,514
|
17 Julio 2012, 02:21 am
por leogtz
|
|
|
[Ayuda] Hilos - basico
Programación C/C++
|
bemone
|
4
|
2,527
|
20 Junio 2013, 20:55 pm
por bemone
|
|
|
Ayuda con hilos en C
Programación C/C++
|
codX
|
3
|
3,092
|
15 Febrero 2020, 18:40 pm
por RayR
|
|