EllaineSilva
(usa Linux Mint)
Enviado em 07/12/2012 - 13:25h
Não consigo rodar o codigo... Ele compila mais não roda! Ajudapor favor!!!!
Esse éo codigo:
#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"
#include "pthread.h"
#include "semaphore.h"
#define TRUE 1
sem_t mutex; /* controla o acesso a 'rc' */
sem_t db; /* controla o acesso a base de dados */
int rc = 0; /* número de processos lendo ou querendo ler */
void* reader(void *arg);
void* writer(void *arg);
void read_data_base();
void use_data_read();
void think_up_data();
void write_data_base();
int main() {
sem_init(&mutex, 0, 1);
sem_init(&db, 0, 1);
pthread_t r[3], w[2];
int i;
/* criando leitores */
for (i = 0; i < 3 ; i++) {
pthread_create(&r[i], NULL, reader, (void*) &i);
}
/* criando escritores */
for (i = 0; i< 2; i++) {
pthread_create(&w[i], NULL, writer, (void*) &i);
}
while(TRUE);
return 0;
}
void* reader(void *arg) {
int i = *((int *) arg);
while(TRUE) { /* repere para sempre */
sem_wait(&mutex); /* obtém acesso exclusivo à 'rc' */
rc = rc + 1; /* um leitor a mais agora */
if (rc == 1) { /* se este for o primeiro leitor... */
sem_wait(&db);
}
sem_post(&mutex); /* libera o acesso exclusivo a 'rc' */
read_data_base(i); /* acesso aos dados */
sem_wait(&mutex); /* obtém acesso exclusivo a 'rc' */
rc = rc - 1; /* um leitor a menos agora */
if (rc == 0) { /* se este for o último leitor */
sem_post(&db);
}
sem_post(&mutex); /* libera o acesso exclusivo a 'rc' */
use_data_read(i); /* região não crítica */
}
}
void* writer(void *arg) {
int i = *((int *) arg);
while(TRUE) { /* repete para sempre */
think_up_data(i); /* região não crítica */
sem_wait(&db); /* obtém acesso exclusivo */
write_data_base(i); /* atualiza os dados */
sem_post(&db); /* libera o acesso exclusivo */
}
}
void read_data_base(int i) {
printf("Reader %d estah lendo os dados!\n", i);
sleep( rand() % 5);
}
void use_data_read(int i) {
printf("Reader %d estah usando os dados lidos!\n", i);
sleep(rand() % 5);
}
void think_up_data(int i) {
printf("Writer %d estah pensando no que escrever!\n", i);
sleep(rand() % 5);
}
void write_data_base(int i) {
printf("Writer %d estah escrevendo os dados!\n", i);
sleep( rand() % 5);
}