#include #include #include #include typedef int buffer_item; #define BUFFER_SIZE 5 int sum[BUFFER_SIZE] = {-1,-1,-1,-1,-1}; // Variable compartida para todos los hilo. int insert_item(buffer_item item){ int i = 0; while(sum[i] != -1){ if(i-1 == BUFFER_SIZE) return -1; i++; } sum[i] = item; return 0; } int remove_item(){ int i; i = BUFFER_SIZE-1; while(sum[i] == -1){ if(i == 0) return -1; i--; } sum[i] = -1; return 0; } void *Producer(){ buffer_item rand_value; int sleep_value; while (1) { /* dormir durante un periodo de tiempo aleatorio */ sleep_value = rand()%5+1; sleep(sleep_value); /* genera un numero aleatorio */ rand_value = rand()%10+1; printf("Se produjo %d\n",rand_value); if(insert_item(rand_value)) printf("%d ingreso correctamente.\n",rand_value); else printf("%d no pudo ingresar, buffer lleno.\n",rand_value); } } void *Consumer() { int sleep_value; while (1) { sleep_value=(rand()%5+1); sleep(sleep_value); if(remove_item()) printf("Item eliminador con exito\n"); else printf("Error, Buffer vacio\n"); } } int main(int argc, char *argv[]) { pthread_t tid, tid1; // Identificadores de los hilos pthread_attr_t attr; // Seteo de atributos de los hilos. pthread_attr_init (&attr) ; // Atributos normales para los hilos. pthread_create(&tid, &attr, Producer(), argv[1]); // Crea el hilo pthread_create(&tid1, &attr, Consumer(), argv[1]); // Crea el segundo hilo /* compute_some_stuff();*/ pthread_join (tid1); // Espera a que el hilo salga antes de continuar pthread_join (tid); printf("Producer y Consumer corrieron"); return 0; }