Jantar dos filósofos
ALUNOS:
PROFESSOR:
ASSUNTO: Implementação e relatório técnico de um problema clássico de sincronização: O Jantar dos Filósofos
INTRODUÇÃO O Jantar dos filósofos é um problema de sincronização de processo, o qual se resume a um número X de filósofos sentados ao redor de uma mesa redonda, onde cada filósofo está ou com fome ou comendo ou pensando. Quando um filósofo está com fome ele não pode estar comendo nem pensando e o mesmo segue para os outros casos. No centro da mesa existe um pote de arroz e um número X de hashi, que é igual a quantidade de filósofos sentados a mesa, como mostra na Figura 1. Quando um filósofo está com fome ele pode pegar somente um hashi de cada vez, e ele não pode pegar um hashi que já esteja na mão de outro filósofo. Quando o filósofo possui os dois hashis ao mesmo tempo, ele poderá comer sem soltá-los, e quando terminar o filósofo solta os dois hashis e volta a pensar. Figura 1 - O jantar dos filósofos
O problema do jantar dos filósofos visa alocar vários recursos entre vários processos, com o intuito de corrigir os deadlocks, as inconsistências de dados e as starvation. Neste trabalho foi corrigido o caso de inconsistência de dados, o qual foi tratado com um bloqueio de recursos, e o problema de deadlock que foi resolvido com uma relação de paridade entre as trocas de recursos.
MATERIAIS E MÉTODOS Para a implementação do trabalho foi utilizado a linguegem de programação C e o editor de texto Gedit. As bibliotecas utilizadas foram as, stdio.h, stdlib.h, pthread.h, linux/unistd.h, sys/types.h, syscall.h e semaphore.h. Foram criados dois programas, o primeiro programa foi implementado com o intuito de mostrar um erro de inconsistência de dados, e o segundo foi feito para mostrar uma possível solução do erro citado a cima. As técnicas utilizadas no segundo programa foi semáforo, para tratar o caso de inconsistência de dados, e uma relação de paridade entre as trocas