Jantar dos filósofos

1030 palavras 5 páginas
Jantar dos Filósofos utilizando threads
O problema dos filósofos consiste em 5 filósofos sentados em uma mesa circular, realizando duas tarefas: pensar ou comer. Enquanto comem, os filósofos não pensam e enquanto pensam, os filósofos não comem.
Na mesa circular, existe um prato de spaghetti para cada filósofo e existe 1 garfo entre cada dois pratos, exemplificado na imagem abaixo. Para comer, o filósofo necessita dos dois garfos (da sua esquerda e da sua direita).

Este problema também pode gerar um deadlock. Isto ocorre na seguinte situação: suponha que todos os filósofos desejem comer ao mesmo tempo. Assim, todos pegam o seu garfo da esquerda simultaneamente. Ao tentarem pegar o garfo da direita, todos os filósofos esperarão eternamente, pois cada filósofo está segurando um garfo.

Na seguinte solução, utilizaremos threads e semáforos. Uma thread para cada um dos filósofos e semáforos para garantir que situações de deadlock não ocorrerão.
Na solução, mantemos constante a quantidade de tempo que o filósofo permanece comendo e a quantidade de tempo que ele permanece pensando. Cada filósofo permanece em 3 estados: HUNGRY, EATING ou THINKING, explicados no código. Caso se deseje maior aleatoriedade na simulação, é possível alterar estes valores para randômicos, utilizando a função rand().

Utilizaremos as instruções sem_wait e sem_post para controlar o acesso às regiões críticas.
SYNOPSIS
#include <semaphore.h>

int sem_wait(sem_t *sem); int sem_trywait(sem_t *sem);
SYNOPSIS

#include <semaphore.h> int sem_post(sem_t *sem);

Para criar estes semáforos, vamos utilizar os seguintes comandos sem_t e sem_init:

SYNOPSIS

#include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value);

Além disso, devemos criar as threads. Isto pode ser feito utilizando os seguintes comandos: declaração: pthread_t criação: pthread_create() –
SYNOPSIS
#include <pthread.h>

int pthread_create(pthread_t

Relacionados

  • Jantar dos Filosofos
    577 palavras | 3 páginas
  • Jantar dos filósofos
    918 palavras | 4 páginas
  • Jantar dos filósofos
    2546 palavras | 11 páginas
  • O Jantar dos Filósofos
    334 palavras | 2 páginas
  • Jantar dos filósofos
    535 palavras | 3 páginas
  • O Jantar dos Filósofos
    339 palavras | 2 páginas
  • Jantar Filosofos
    583 palavras | 3 páginas
  • Jantar dos filósofos
    1856 palavras | 8 páginas
  • Entendendo o Jantar dos Filósofos
    1031 palavras | 5 páginas
  • Problema do jantar dos filósofos
    1064 palavras | 5 páginas