Por que cinco filósofos gastronômicos?


18

Fiquei me perguntando por que o problema dos filósofos de jantar é baseado em um caso de cinco filósofos. Por que não quatro?

Eu acho que podemos observar todas as questões desagradáveis ​​que podem ocorrer quando discutimos o exemplo de cinco filósofos também quando recebemos quatro pensadores. É apenas por uma razão histórica, então?


1
O problema original foi descrito por Dijkstra em 1965 e chamado de Quintuplo de Jantar (encontrado nas notas na parte superior da página 3).

Eu me lembro de aprender aobut quatro filósofos jantar ...
Michael Borgwardt

16
São 5 filósofos porque ele estava tentando ver se alguém notaria o óbvio; 5 filósofos juntos conversarão até que o restaurante os expulse, eles nunca pegarão seus talheres. 4 pode ter uma pausa na conversa por tempo suficiente para começar a comer. Com 5, assim que os dois param de falar por um momento, já existe um na fila aguardando interjeição para garantir a continuidade.
Jimmy Hoffa

1
@Jimmy Hoffa - + 1. E por que isso não responde?
SChepurin

Respostas:


17

De acordo com o que está escrito no EWD310 "Pedido hierárquico de processos sequenciais" , parece que o número 5 foi escolhido para fins educacionais, a fim de facilitar aos alunos o entendimento do algoritmo projetado para demonstrar a solução do problema.

Este mesmo artigo apóia ainda mais a idéia de que 5 não é realmente relevante para o problema geral, primeiro declarando explicitamente que "o problema poderia ter sido colocado para 9 ou 25 filósofos ..." e depois representando-o em termos de duas operações simultâneas. entidades " , classe A e classe B, compartilhando o mesmo recurso ..."

A solução usada por Dijkstra introduz três "estados do filósofo": pensando, comendo, com fome. O código apresentado para resolver o problema opera esses três estados, juntamente com um número não relacionado a ele de filósofos.

Se o autor tivesse escolhido o número de filósofos 2, 3 ou 4, isso poderia causar confusão para os alunos que lêem o código, se o número escolhido está relacionado à quantidade de estados ou a qualquer outra coisa. Isso pode ser facilmente testado por tentando números mencionados na descrição citadas de EWD310 abaixo: nota, por exemplo, como isso mudaria [0:4]a [0:3], [0:2], [0:1]e declarações envolvendo mod.

Ao contrário, o número 5 parece bastante inocente e não invoca associações desnecessárias. Pode-se dizer que foi escolhido para ilustrar melhor que a quantidade de filósofos é, bem, arbitrária .


O algoritmo mencionado é apresentado no EWD310 da seguinte maneira:

... associamos a cada filósofo uma variável de estado "C", onde

C[i] = 0significa: filósofo iestá pensando

C[i] = 2significa: filósofo iestá comendo.

...

introduzimos para a última transição um estado intermediário

C[i] = 1significa: filósofo iestá com fome

Agora, cada filósofo passará ciclicamente pelos estados 0, 1, 2, 0 ...... A próxima pergunta a fazer é: quando é que a transição (perigosa) de 1 para 2 ocorre para o filósofo K?

...

No universo, assumimos declarado

1) o semaphore mutex, inicialmente = 1

2) o integer array C[0:4], com inicialmente todo o elemento = 0

3) semaphore array prisem[0:4]com inicialmente todos os elementos = 0

4) procedure test (integer value K);

if C[(K-1) mod 5] ≠ 2 and C[K]= 1
    and C[(K+1) mod 5] ≠ 2 do
      begin C[K]:= 2; V(prisem[K]) end;

(Este procedimento, que resolve a instabilidade Kquando presente, será chamado apenas de dentro de uma seção crítica).

Neste universo, a vida do filósofo wagora pode ser codificada

cycle begin think;
            P (mutex);
               C[w]:= 1; test (w);
            V(mutex);
            P(prisem[w]); eat
            P(mutex);
               C[w]:= 0; test [(w+l) mod 5];
               test [(w-1) mod 5];
            V(mutex)
      end

E isso conclui a solução que eu estava buscando ...


2
Talvez eu não seja um filósofo, porque consigo pensar ao mesmo tempo em que estou comendo ou sentindo fome. E mais: nenhum deles está bebendo ou mesmo conversando.
#

5

Apenas Dijkstra pode responder com certeza, mas eu ficaria confiante o suficiente para que seja arbitrário.

"Foi originalmente formulado em 1965 por Edsger Dijkstra como um exercício de exame para estudantes, apresentado em termos de computadores competindo pelo acesso a periféricos de unidades de fita. Logo depois, Tony Hoare deu ao problema sua formulação atual".

http://en.wikipedia.org/wiki/Dining_philosophers_problem


2
Considere o problema de quatro clientes em comparação com cinco. Como o problema muda? É mais fácil ou mais difícil? Essa foi uma pergunta do exame - a mais difícil é provavelmente a que você deseja fazer.

2

Porque é estranho, nem par. Para que você não tente criar um algoritmo que se baseia na simetria ou na formação de pares, e só muito mais tarde perceba que não funciona no caso geral.

Esta é uma opinião; Não tenho conhecimento histórico do que passou pela cabeça do autor.


Este ponto é crucial. Com quatro filósofos, dois pares deles se revezavam em comer.
Aaron Tijolo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.