jueves, 6 de febrero de 2014

Ejemplo #2 - [Threads] Paso de parámetros

#include <pthread.h>
#include <stdio.h>

struc arg {
   int x;
   int v[10];
   int li;
   int lf;
};

void *BusquedaLineal(void *argg) {
   int i=0, pos = -1, enc=0;

   struct argm *arg;

   arg = (struct argm *) argg;
   i = arg->li;

   while (i<=arg->lf && !enc) {
      if ((arg->v[i]) == (arg->x)) enc =1;
      else i++;
   }
   if (enc) printf("Encontrado en pos = %d\n", i);
}

void Rellenar(int *x) {
   int i=0;
   for (i = 0; i<10; i++) {
      x[i]=i;
   }
}

int main () {
   struct argm arg, arg2;
   pthread_t th1, th2;
   pthread_att_t attr;
   int val = 1;

   Rellenar(arg.v);
   Rellenar(arg2.v);

   arg.li = 0;
   arg.lf = 4;
   arg.x = 1;

   arg2.li = 5;
   arg2.lf = 9;
   arg2.x = 1;

   pthread_attr_init(&attr);
   pthread_create(&th1, &attr, BusquedaLineal, &arg);
   pthread_create(&th2, &attr, BusquedaLineal, &arg2);

   pthread_join (th1, NULL);
   pthread_join (th2, NULL);

   printf("Fin\n");

   return 0;  

}


Destacamos que una hebra puede esperar en estado bloqueado hasta que otra termine, para ello usamos la llamada a "join" sobre esta otra hebra. No es más que un mecanismo de sincronización entre hebras, en este caso, la función pthread_join() bloquea la hebra hasta que la hebra que se indica en su parámetro no termine.

No hay comentarios:

Publicar un comentario