FilosofiaBSI

404 palavras 2 páginas
FILÓSOFOS GLUTÕES
JANTAR DOS FILÓSOFOS



O Problema do Jantar dos Filósofos é um problema de programação concorrente proposto por Dijkstra em 1965.

JANTAR DOS







FILÓSOFOS

Considere cinco filósofos que passam suas vidas meditando e comendo.
Cada um dos filósofos compartilha uma mesa redonda comum cercada por cinco cadeiras.
Cada filósofo tem um prato de espaguete.
Para que o filósofo consiga comer ele precisa de 2 garfos. JANTAR DOS









FILÓSOFOS

A vida de cada filósofo consiste em períodos nos quais ele alternadamente come e pensa.
Quando ele medita ele não interage com seus colegas.
Quando um filósofo sente fome ele tenta pegar os dois garfos mais próximos de si (direita e esquerda do seu próprio prato).
Um filósofo pode pegar apenas um garfo de cada vez (a ordem não importa) e, é claro, não poderá pegar nenhum garfo que esteja na mão de outro filósofo.
Assim, quando um filósofo está de posse de dois garfos ele poderá comer. Passado um tempo ele pára de comer, solta os garfos e volta a pensar.

JANTAR DOS

FILÓSOFOS



Este exemplo pode ser aplicado a uma vasta classe de problemas de controle de concorrência.
Como pode-se verificar é uma representação simples do problema de alocar vários recursos a vários processos, sem causar deadlocks.



Veja:





http://www.youtube.com/watch?v=GKo1fYjHbc4

SOLUÇÕES - JANTAR DOS FILÓSOFOS while (true)
{
meditar (duração aleatória entre 0 e 2 segundos) pegar o palito à sua esquerda pegar o palito à sua direita comer (duração aleatória entre 0 e 2 segundos) soltar os palitos
}

SOLUÇÕES - JANTAR DOS FILÓSOFOS


Funciona?

SOLUÇÕES - JANTAR DOS FILÓSOFOS

SOLUÇÕES - JANTAR DOS FILÓSOFOS
1.

2.

3.

Pegar garfo da esquerda e depois o da direita => se todos resolvem pegar o garfo da esquerda ao mesmo tempo gera um deadlock.
Pegar o garfo da esquerda e tentar pegar o da direita, se estiver sendo

Relacionados