Problema dos filosofos

583 palavras 3 páginas
Problema dos filosofos

O problema:
O problema das filosofos consiste em fazer um jantar, onde todas as crianças comam. Porem, entre cada filosofo sentado na mesa ha apenas um talher entre elas, e para comer, cada uma precisara dos dois talheres de seu lado para comer. Elas podem fazer duas coisas (comer ou pensar). Outra observação é que as crianças não podem conversar entre si, o que pode gerar uma deadlock.

Boas soluções:
-ausencia de deadlock
-ausencia de starvation
-auto grau de paralelismo.

Código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h> #define N 5
#define LEFT (i+N-1)%N
#define RIGHT (i+1)%N
#define THINKING 0
#define HUNGRY 1
#define EATING 2 int state[N], i, int_rand; float float_rand; //semaforos sem_t mutex; sem_t sem_fil[N]; //funcao que mostra o estado das N crianças void mostrar(){ for(i=1; i<=N; i++){ if(state[i-1] == THINKING){ printf("A criança %d esta pensando!\n", i); } if(state[i-1] == HUNGRY){ printf("A criança %d esta com fome!\n", i); } if(state[i-1] == EATING){ printf("A criança %d esta comendo!\n", i); } } printf("\n");
}

//acao da criança void *acao_ crianca (void *j){ int i= *(int*) j; while(1){ pensar(i); pegar_garfo(i); comer(i); por_garfo(i); } } void pegar_garfo(int i){ sem_wait(&mutex); state[i]=HUNGRY; mostrar(); test(i); sem_post(&mutex); sem_wait(&sem_fil[i]);
}

void por_garfo(int i){ sem_wait(&mutex); state[i]=THINKING; mostrar(); test(LEFT); test(RIGHT); sem_post(&mutex);
}

//funcao que testa se a criança pode comer void test(int i){ if(state[i] == HUNGRY && state[LEFT] != EATING && state[RIGHT] != EATING){

Relacionados

  • Problema do jantar dos filósofos
    1064 palavras | 5 páginas
  • O problema dos filósofos famintos
    368 palavras | 2 páginas
  • SINCRONIZAÇÃO E COMUNICAÇÃO ENTRE PROCESSOS PROBLEMA DOS FILÓSOFOS
    1141 palavras | 5 páginas
  • Filósofo Sartre e os problemas de comunicação atuais
    1456 palavras | 6 páginas
  • Problemas e questoes levantadas pelos primeiros filosofos
    4572 palavras | 19 páginas
  • Algoritmo dos Filósofos em Pascal - Resolve parcialmente o problema
    269 palavras | 2 páginas
  • Análise dos temas, problemas e as questões levantadas pelos primeiros filósofos pré-socráticos e vincular isto com o fundamento dos conhecimentos das ciências físicas e naturais estudadas na escola
    4702 palavras | 19 páginas
  • Aula06 2
    1185 palavras | 5 páginas
  • Jantar dos filósofos
    2546 palavras | 11 páginas
  • Jantar dos Filosofos
    577 palavras | 3 páginas