Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Próxima revisão | Revisão anterior | ||
so:jantar_dos_filosofos [2008/05/09 17:18] – external edit 127.0.0.1 | so:jantar_dos_filosofos [2011/09/26 22:32] (atual) – [A Entregar] maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== O Jantar dos filósofos ====== | ||
+ | |||
+ | O Jantar dos Filósofos é problema clássico de sincronização proposto por Dijkstra em 1965. A capa da revista // | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ===== O problema ===== | ||
+ | |||
+ | Este projeto consiste em implementar o problema do jantar dos filósofos em C, usando uma thread Posix para modelar cada filósofo e um semáforo Posix para cada palito (// | ||
+ | |||
+ | Cada um dos 5 filósofos tem o seguinte comportamento: | ||
+ | |||
+ | < | ||
+ | while (true) | ||
+ | { | ||
+ | | ||
+ | pegar o palito à sua esquerda | ||
+ | pegar o palito à sua direita | ||
+ | comer (duração aleatória entre 0 e 2 segundos) | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Observações ===== | ||
+ | |||
+ | * Devem ser usados semáforos POSIX na solução; laços de espera ocupada (// | ||
+ | |||
+ | ===== Roteiro ===== | ||
+ | |||
+ | - Implementar uma solução sem controle de impasses | ||
+ | - Implementar uma solução com controle de impasses através de serialização (" | ||
+ | - Implementar uma solução com controle de impasses que permita o máximo paralelismo entre os filósofos | ||
+ | - Medir o número de filósofos que podem comer por segundo, nas três soluções (desabilitar as pausas para efetuar essa medição) | ||
+ | |||
+ | Para medir o desempenho de cada solução, a //thread// principal ('' | ||
+ | |||
+ | <code c> | ||
+ | while(1) | ||
+ | { | ||
+ | sleep (1) ; | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | O contador '' | ||
+ | |||
+ | ===== A Entregar ===== | ||
+ | |||
+ | - As implementações realizadas | ||
+ | - < | ||