Jantar dos filósofos

13.04.09

O jantar dos filósofos é um dos problemas clássicos da programação concorrente.

Cinco filósofos estão sentados em círculo, tentando comer macarronada com seus garfos. Cada filósofo possui uma prato mas há apenas cinco garfos. Isto é um problema, pois são necessários dois garfos, já que a macarronada é escorregadia e um garfo apenas não basta. As alternativas dos filósofos são: Pensar ou Comer. No modo pensar, um filósofo não segura nenhum garfo. Porém, quando está com fome, o filósofo tenta pegar os dois garfos na direita e esquerda.

Esse problema ilustra a competição por um conjunto de recursos – neste caso os garfos. Os filósofos não podem comer todos ao mesmo tempo já que não há garfos suficientes para todos. Além disso é preciso garantir que os filósofos não impeçam uns aos outros de comer entrando num deadlock, ou seja, ninguém mais pode comer.

Leitura adicional:
hackeandooplaneta.blogspot.com
www.jr.eti.br/mestrado/cmp041/ProblemasClassicos.htm

30 alunos não foram à escola.

  1. nuss

    Esse problema me dá pesadelos até hoje.

  2. leandro

    Me veio na cabeça uma analogia esdrúxula, poderiamos ilustrar esse problema com a população brasileira: alguns enquanto pensam não comem, quando tentam comer não conseguem.
    Triste, mas real.

  3. jonathan

    interessante , mas o mais intressante é que o kuririn virou filosofo? :P

  4. Bruno Guedes (Toupeira Profissional)

    Nunca entendi porque tantos filósofos juntos nunca pensaram em arranjar mais garfos. :P

  5. Gullit

    Simples, bota a “pontinha” na boca e vai “chupando/sugando” o resto. (:

  6. Erick Major

    Muito interessante este problema.

    Problema muito discutido na programação de sistemas operacionais, nos quais o gerenciamento de recursos é um dos pontos chave.

    Valeu pelas dicas de leitura!

  7. Diego

    Que lembrança da materia de sistemas operacionais, onde colocavam em nossa frente aquele applet para demonstrar o conceito… Infelizmente não era tão bonito que nem uma tirinha… kkkkkk

  8. N@ndo

    Começei a acompanhar o blog faz uma semana e tinha pensado: tá sem atualização. Mas enganei-me.

    Essa parada do topo tem solução. É simples: cada um inicializa um garfo do existente na sua mão e, assim, conseguem comer direito todos eles. E, no final, é só botar um FREE() nos baratos e acabar com tudo isso. Qualquer erro na resposta acima, é por que começei Java há pouco tempo com VB6 (uma meleca em quesito componentes acessíveis, diga-se de passagem). Ah, mas como era tão bom a época Pascalina que dava saudade em ver a telinha do DOS…

  9. Gilliano

    Deve ser por isso que existe o risco de um processo morrer por inanição =P

  10. Rodrigo T.

    uaheiuaheiuahiuaeh
    Muito bom, esse problema foi um dos meu pesadelos semestre passado…
    -.-

  11. sil

    Hehehe…interessante =D

  12. Paulino Michelazzo

    Macarronada se come com garfo e colher, não com dois garfos :-)

  13. Magno

    cara… você se superou

  14. André Gondim

    Com fome talvez eu pegaria com a mão mesmo heheeh

    Abração!! ;)

  15. bractus

    Segundo o livro do Tanebaum, tem de comer com 2 garfos porque a macarronada tem muita manteiga!

  16. Fabricio

    HAAHAHAHAHA!!! eu acabei d voltar da facul ond tive essa aula.. Agora sim fikei com medo disso..

  17. Wellington

    Este problema é muito legal, não me lembro ao certo sobre a possível solução. Preciso voltar a estudar sistemas operacionais :P

  18. Lucas Polo

    Má perae? O filósofo que quer roubar o garfo é o Kurilin?

  19. PEdroArthur_JEdi

    KkK!

    Boa… Estou escrevendo um post pro under-linux.org sobre programação multi-thread… Já econtrei a ilustração!!!

    Na disciplina de S.O. ilustramos um problema correlato: A Farra dos Nerds.

    Os nerds estão numa festa e todos querem beber! Porém, como a cahaça é muito forte, tem que tirar o gosto com refrigerante. Existem piso(n/2) copos de cachaça e piso(n/2) copos de refrigerantes, onde n é o número de nerds. Os nerds podem estar em dois estados: bodados (vulgo bêbo rodando) ou bebendo. Fizemos a simulação em Java…

  20. Dimitri Lameri

    Caramba, nunca tinha visto isso.

  21. Hugo

    Digai Karlisson, faz tempo que num apareço, mas to acompanhando nos feeds ainda. Não sei se você já viu mas tem uma ótima foto que ilustra um deadlock neste post aqui:
    http://aramos.org/2008/01/explicando-um-deadlock-com-imagens-de-transito/

  22. Lucas Fernando Amorim

    Nunca entendi porque tantos filósofos juntos nunca pensaram em arranjar mais garfos. :P ²

    Muita filosofia e poucos garfos … ~D

  23. Wendel

    Quando aprendi sobre esse jantar dos filósofos, me ocorreu que faria muito mais sentido se fossem filósofos orientais, e cada garfo fosse na verdade um “hashi”.

    Aí sim ficaria claro que cada filósofo precisa de dois hashi pra comer…

    Pensando bem, preciso reler sobre isso, porque eu já esqueci qual era a solução ^^;;;

  24. Wendel

    ps: curiosamente eu acabo de abrir o artigo wikipédico supra-linkado e eles mencionam exatamente o mesmo que eu: que é mais intuitivo com arroz+hashi do que com espaguete+garfo

  25. Pulga

    Filósofos pensam e pensam…E a única conclusão é : largam de frescura e comem com a mão úú

  26. Rodrigo Amorim

    Sabe por que isso não funciona? Porque filósofo não sabe programar! XDDDD

  27. Lorrene

    Se batendo com S.O.? Depois piora :) Mas tio Tanenbaum sabe das coisas, preferi a didática dele que a de Silbvercthaz (o cara que ensina S.O. com Java).

  28. Thiago Leite

    Lembrei daquele vídeo que você postou no Twitter: http://tinyurl.com/9t3plh

  29. Rafael Fagundes

    esse problema e bagaceira… :-(

  30. PRIMO[GF]

    Eu tinha acabado de fazer um trabalho na facul com essa questão quando li esse post….foi demais…dei muita rizada…ahuahuahuahua