Buenas estoy implementando el problema del productor/consumidor:
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <errno.h>
#define veces 30
#define tamano 10
sem_t em,n,s;
int buffer[tamano];
int pos=0;
productor(){
int dato,i;
for(i=0;i<veces;i++){
sleep(1);
dato=random();
printf("%d - Dato:%d\n",i,dato);
sem_wait(&n);
sem_wait(&em);
dato=random();
buffer[pos]=dato;
pos++;
sem_post(&em);
sem_post(&s);
}
}
consumidor(){
int i,num;
for(i=0;i<veces;i++){
sem_wait(&s);
sem_wait(&em);
pos--;
num=buffer[pos];
printf("%d - dato extraido:%d",i,num);
sem_post(&em);
sem_post(&n);
sleep(i%5);
}
}
main(){
pthread_t tproductor;
pthread_t tconsumidor;
int error1,error2;
sem_init(&em,0,1);
sem_init(&s,0,0);
sem_init(&n,0,tamano);
error1=pthread_create(&tproductor,NULL,(void *)productor,NULL);
if(error1)
printf("%d\n",error1);
error2=pthread_create(&tconsumidor,NULL,(void *)consumidor,NULL);
if(error2)
printf("%d\n",error2);
}
Lo compilo tal que:
cc -lpthread productor-consumidor.c -o productor-consumidor.o
Y lo ejecuto tal que:
./productor-consumidor.o
No me da ningún error en el código, pero tampoco me muestra nada, osea lo ejecuto y los printf que tengo no los visualiza, ¿alguien sabe porque puede ser?
Un saludo