#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