Escolar Documentos
Profissional Documentos
Cultura Documentos
2010
O Problema dos Leitores e Escritores
Outros problemas são úteis para modelar processos concorrentes pelo
acesso exclusivo a um numero limitado de recursos, como dispositivos de
Entrada/Saida. O problema dos Leitores e Escritores, modela o acesso a uma base
de dados. Por exemplo, um sistema de reserva e linhas aéreas, com muitos
processos em competição, querendo ler e escrever. É aceitável que múltiplos
processos leiam a base de dados ao mesmo tempo, mas, se um processo estiver
atualizando (escrevendo) na base de dados, nenhum outro processo pode ter
acesso ao banco de dados, nem mesmo os leitores. A questão é: como programar
os leitores e os escritores?
Código: Solução em C
semaphore mutex = 1; //controla acesso a região critica
semaphore db = 1; //controla o acesso a base de dados
int rc = 0; //numero de processos lendo ou querendo ler
void reader(void){
while (TRUE){ //loop infinito
down(&mutex); //obtém acesso exclusivo a região
critica
rc = rc++; //um leitor a mais
if(rc == 1)down(&db); //se este for o primeiro leitor,
bloqueia a base de dados
up(&mutex); //libera acesso exclusivo a região
critica
read_data_base(); //acesso aos dados
down(&mutex); //obtém acesso exclusivo a região
critica
rc = rc--; //um leitor a menos
if(rc==0)p(&db); //se este for o ultimo leitor, libera a
base de dados
up(&mutex); //libera o acesso a região critica
use_data_read(); //utiliza os dados
}
}
void writer(void){
while (TRUE){ //loop infinito
think_up_data(); //região não critica
down(&db); //obtém acesso exclusivo
write_data_base(); //atualiza os dados
up(&db); //libera acesso exclusivo
}
}
Resumindo
Simplificando. Trata-se de uma generalização do problema do Buffer
Circular, que tem um único produtor (escritor) e um único consumidor (leitor)
armazenando e recuperando dados.
Problema
Se sempre chegarem Processos Leitores e existir pelo menos um
Processo Leitor acessando, o Processo Escritor pode chegar a um problema
denominado Starvation (inanição).
Starvation é a possibilidade de um Processo nunca conseguir acessar a
Base de Dados.
Alternativa
http://www.slideshare.net/rafaelov/apresentao-do-artigo-threads-o-problema-dos-
leitores-e-escritores-implementado-em-c
Acessado em 10/06/2010