All pastes #1088996 Raw Edit

Stuff

public text v1 · immutable
#1088996 ·published 2008-07-31 22:45 UTC
rendered paste body
#include <pthread.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
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;
		}