jueves, 6 de febrero de 2014

Ejemplo #3 - [Threads] Regiones críticas: El problema de los jardines

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

long Visitantes = 0;
pthread_mutex_t mutex;

void IncVisitantes() {
   pthread_mutex_lock(&mutex);
   Visitantes = Visitantes + 1;
   pthread_mutex_unlock(&mutex);
}

void *HebraVisitas (void *argg) {
   int i=0;

   long *NumVisitas;

   NumVisitas = (long *) argg;

   for (i=0; i<*NumVisitas;i++) {
      IncVisitantes();
   }
}


int main () {
   pthread_t th1, th2, th3, th4;
   pthread_attr_t attr;
   long visi1 = 1000000;
   long visi2 = 2000000;

   pthread_attr_init(&attr);
   pthread_mutex_init(&mutex, NULL);

   pthread_create(&th1, &attr, HebraVisitas, &visi1);
   pthread_create(&th2, &attr, HebraVisitas, &visi2);
   pthread_create(&th3, &attr, HebraVisitas, &visi1);
   pthread_create(&th4, &attr, HebraVisitas, &visi2);
   pthread_join(th1, NULL);
   pthread_join(th2, NULL);
   pthread_join(th3, NULL);
   pthread_join(th4, NULL);

   printf("El numero de visitas totales =%ld\n", Visitantes);
   printf("Fin\n");
   return 0;
}

Probad a realizar el ejercicio sin usar mutex y ampliando el número de visitantes. Comentar los resultados :D

No hay comentarios:

Publicar un comentario