Ayuda con hilos en C

Iniciado por snake_linux, 27 Agosto 2015, 13:19 PM

0 Miembros y 8 Visitantes están viendo este tema.

snake_linux

Cita de: ivancea96 en 27 Agosto 2015, 16:01 PM
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.

He modificado un poco el código y al final se ha quedado así:

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    #include <pthread.h>
     
    void * funcion(void *);
     int b=0;
    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");
     printf("b vale %d", b);
     pthread_join(idhilo, NULL);
    }
     
    void * funcion(void * a) {
     
      b=5;
     
     
    }


Y el valor de b me da 0, por lo que no se ejecuta el hilo hijo hasta que no llega al join...

ivancea96

Coloca un sleep(1) en el main para ver si el thread llega a ejecutarse antes del join.

snake_linux

Cita de: ivancea96 en 27 Agosto 2015, 18:14 PM
Coloca un sleep(1) en el main para ver si el thread llega a ejecutarse antes del join.

He hecho lo que me has dicho:

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    #include <pthread.h>
#include <unistd.h>
     
    void * funcion(void *);
     int b=0;
    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");
      sleep(1);
     printf("b vale %d", b);
     pthread_join(idhilo, NULL);
    }
     
    void * funcion(void * a) {
     
      b=5;
     
     
    }


El caso es que funciona, pero sigo sin entenderlo, ¿ Por que hay que hacer un segundo de pausa para que se ejecute el hilo ?.

Saludos.

ivancea96

Los diferentes hilos no tienen por qué ir coordinados. Si el main acaba antes que los otros threads, los otros threads se acaban al momento.

snake_linux

Cita de: ivancea96 en 27 Agosto 2015, 21:10 PM
Los diferentes hilos no tienen por qué ir coordinados. Si el main acaba antes que los otros threads, los otros threads se acaban al momento.

Vale muchas gracias, ya me ha quedado claro.