Вы находитесь на странице: 1из 4

UNIVERSIDADE ESTADUAL DO MARANHO

CENTRO DE CINCIAS TECNOLGICAS


CURSO DE ENGENHARIA DA COMPUTAO

BRUNO MACEDO

EDUARDO ANDRADE
JULIANA VIANA
LUCAS JEFERSON
LUIS JHONNE
MICHAEL BRITO
VANESSA MEMORIA

RELATRIO SOBRE O PROBLEMA CLSSICO DE SINCRONIZAO: JANTAR


DOS FILSOFOS

So Luis
2013

BRUNO MACEDO
EDUARDO ANDRADE
JULIANA VIANA
LUCAS JEFERSON
LUIS JHONNE
MICHAEL BRITO
VANESSA MEMORIA

RELATRIO SOBRE O PROBLEMA CLSSICO DE SINCRONIZAO: JANTAR


DOS FILSOFOS

Trabalho apresentado disciplina


Programao Concorrente do Curso de
Engenharia da Computao da UEMA,
como requisito para obteno da terceira
nota.
Prof. Dr. Luis Carlos Fonseca

So Luis
2013

1 O JANTAR DOS FILSOFOS


1.1 DEFINIO
Um problema clssico de sincronizao o do "Jantar dos Filsofos", que foi proposto
em 1965 pelo matemtico por Dijkstra (1965) e apresenta a seguinte caracterizao:

Cinco filsofos esto sentados ao redor de uma mesa circular para o jantar.

Cada filsofo possui um prato para comer macarro.

Os filsofos dispem de hashis e cada um precisa de 2 hashis para comer.

Entre cada par de pratos existe apenas um hashi, ou em termos de concorrncia, hashis
precisam ser compartilhados de forma sincronizada.

Os filsofos comem e pensam, alternadamente. Eles no se atm a apenas uma das


tarefas.

Alm disso, quando comem, pegam apenas um hashi por vez: Se conseguir pegar os
dois come por alguns instantes e depois larga os hashis.
O problema coordenar o uso dos hashis de maneira que nenhum filsofo fique com

fome. Esse problema exemplifica muito bem muitas solues e muitos problemas encontrados
na programao concorrente. Pode facilmente ocorrer o deadlock se cada filsofo pegar o seu
hashi da esquerda e se recusar a liber-lo at ter comido. Pode ocorrer a inanio se dois
filsofos conspirarem contra um terceiro.
Assim, uma implementao desse problema deve tratar o deadlock e usar um
mecanismo de state para controlar o acesso a regio crtica, que o uso do hashi.

1.2 IMPLEMENTAO
Na implementao abaixo, utilizou-se a linguagem de programao Python, na verso
estvel 2.7, que possui nativamente a possibilidade de usar threads e outros conceitos da
programao concorrente.
Abaixo percebe-se que o acesso regio critca controlado usando semforos,
tambm nativos da linguagem.

#-*-coding: utf-8 -*import thread


import time, random
import threading
garfo = list()
for i in range(5):
garfo.append(threading.Semaphore(1))
def filosofo(f):
f = int(f)
while True:
# garfo da esquerda]
garfo[f].acquire()
# garfo da direita
garfo[(f + 1) % 5].acquire()
print "Filsofo %i comendo..." % f
time.sleep(random.randint(1, 5))
garfo[f].release()
garfo[(f + 1) % 5].release()
print "Filsofo %i pensando..." % f
time.sleep(random.randint(1, 10))
for i in range(5):
print "Filsofo", i
thread.start_new_thread(filosofo, tuple([i]))

Вам также может понравиться