Trabalho produtor consumidor
O problema é quando enquanto um processo produz escrevendo em um buffer limitado, equanto o outro consome limpando o buffer, preservando a integridade dos dados.
Neste algoritmo é definido o buffer para 8 posições sendo a sua limitação. São definidas variaveis para que o algoritmo saiba quando ele esta dormindo, acordado, quando o processo de consumir estiver acabado e quando ele estiver processando.
Há uma estrutura que define um apontador, para que aponte uma nova posição de leitura ou escrita, e que ainda mantem a ordem na fila.
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXBUFF 8 /*Maximo de buffer livre*/
#define DORMINDO 0
#define ACORDADO 1
#define ACABADO 0
#define PROCESSANDO 1
typedef struct apontador{/* Estrutura que aponta para nova posiçao de leitura ou escrita.. e mantem a ordem em uma fila*/ int livre;/*Posiçao do buffer*/ struct apontador *prox;/*proxima posiçao do buffer*/
}APONTA;
APONTA *fila_leitura_inicio = NULL, *fila_leitura_fim = NULL;/*Fila que controla buffer livre de leitura*/
APONTA *fila_escrita_inicio = NULL, *fila_escrita_fim = NULL;/*Fila que controla buffer livre de escrita*/
void *Consumir(void* texto); void *produz(void* texto); int setFila(int posicao, APONTA **begin, APONTA **end); int getFila(APONTA **begin, APONTA **end);
char bufferLimitado[MAXBUFF]; /*Buffer de trabalho*/ int buff_empty = MAXBUFF; /*Buffer livre*/ int buff_full = 0; /*Buffer ocupado*/ int status_produz = ACORDADO; int status_consome = ACORDADO;/* Se estÃo dormindo ou acordados*/ int status_processamento = PROCESSANDO;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Mutex que controla o acesso ao buffer*/ pthread_mutex_t mutex_status_buff = PTHREAD_MUTEX_INITIALIZER; /*Mutex que controla a espera(dormir/acordar)*/