Leitores e Escritores - Deadlocks
Trabalho de Sistemas
Operacionais
O problema dos leitores/escritores
• Introdução:
Mais um problema famoso de comunicação interprocesso que modela o acesso a uma base de dados é o problema dos leitores e escritores.
Em um sistema com muitos processo querendo ler e escrever em uma arquivo, é aceitável que múltiplos processos leiam a base de dados ao mesmo tempo, mas, se um processo estiver escrevendo na base de dados, nenhum outro processo pode ter acesso ao bando de dados, nem mesmo os leitores.
• No exemplo da figura ao lado, os leitores e escritores acessam de forma concorrente uma matriz de inteiros M.
Uma solução trivial para esse problema consistiria em proteger o acesso à área compartilhada com um semáforo inicializado em 1; assim, somente um processo por vez poderia acessar a área, garantindo a integridade de todas as operações. O código a seguir ilustra essa abordagem simplista:
• Todavia, essa solução deixa a desejar em termos de desempenho, porque restringe desnecessariamente o acesso dos leitores à área compartilhada: como a operação de leitura não altera os valores armazenados, não haveria problema em permitir o acesso simultâneo de vários leitores à área compartilhada, desde que as escritas continuem sendo feitas de forma exclusiva. Uma nova solução para o problema, considerando a possibilidade de acesso simultâneo pelos leitores, seria a seguinte:
• Essa solução melhora o desempenho das operações de leitura, mas introduz um novo problema: a priorização dos leitores. De fato, sempre que algum leitor estiver acessando a área compartilhada, outros leitores também podem acessá-la, enquanto eventuais escritores têm de esperar até a área ficar livre (sem leitores). Caso existam muito leitores em atividade, os escritores podem ficar impedidos de acessar a área, pois ela nunca ficará vazia. Soluções com priorização para os escritores e soluções equitativas entre ambos podem ser