Código
#include <stdio.h> #include <pthread.h> #define MAX 100 pthread_mutex_t el_mutex; pthread_cond_t condc,condp; int buffer = 0; void *productor(void *ptr){ int i; for(i = 1; i <= MAX;i++){ pthread_mutex_lock(&el_mutex); while(buffer != 0 ) pthread_cond_wait(&condp,&el_mutex); buffer = i; pthread_cond_signal(&condc); pthread_mutex_unlock(&el_mutex); } pthread_exit(0); } void *consumidor(void *ptr){ int i; for(i = 1; i <= MAX;i++){ pthread_mutex_lock(&el_mutex); while(buffer == 0 ) pthread_cond_wait(&condc,&el_mutex); buffer = 0; pthread_cond_signal(&condp); pthread_mutex_unlock(&el_mutex); } pthread_exit(0); } int main(){ pthread_t pro,con; pthread_mutex_init(&el_mutex,0); pthread_cond_init(&condc,0); pthread_cond_init(&condp,0); pthread_create(&con,0,consumidor,0); pthread_create(&pro,0,productor,0); pthread_join(pro,0); pthread_join(con,0); pthread_cond_destroy(&condc); pthread_cond_destroy(&condp); pthread_mutex_destroy(&el_mutex); return 0; }
Todo va bien hasta aqui.Mi pregunta es si tiene sentido esta dos lineas:
Código
while(buffer != 0 ) pthread_cond_wait(&condp,&el_mutex);
Código
while(buffer == 0 ) pthread_cond_wait(&condc,&el_mutex);
¿Es necesario poner la condicion en un while ?. Hasta donde yo entiendo el problema podria ser resuelto sustituyendo el while por un if y lo he verificado en algunas pruebas pero no se si algun detalle se me esta escapando. Creo que el while seria util cuando se tuviera mas de un consumidor o productor pero en este caso en concreto en el cual solo es 1-1 , ¿Tiene sentido?