TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Sistemas Operacionais Jantar dos filosofos

Por:   •  9/7/2019  •  Trabalho acadêmico  •  420 Palavras (2 Páginas)  •  217 Visualizações

Página 1 de 2

#include<stdio.h>

#include<stdlib.h>

#include<semaphore.h>

#include<pthread.h>

#include <sys/types.h>

#include <unistd.h>

#define N 5

#define PENSAR 0

#define FOME 1

#define COMER 2

#define ESQUERDA (nfilosofo+4)%N //agarrar garfo

//da esquerda

#define DIREITA (nfilosofo+1)%N //agarrar garfo

//da direita

void *filosofo(void *num);

void agarraGarfo(int);

void deixaGarfo(int);

void testar(int);

sem_t mutex;

sem_t S[N]; //inicializacao do semáforo

int estado[N];

int nfilosofo[N]={0,1,2,3,4};

void *filosofo(void *num)

{

while(1)

{

int *i = num;

sleep(1);

agarraGarfo(*i);

sleep(1);

deixaGarfo(*i);

}

}

void agarraGarfo(int nfilosofo)

{

sem_wait(&mutex);

estado[nfilosofo] = FOME;

printf("Filosofo %d tem fome.\n", nfilosofo+1);

//+1 para imprimir filosofo 1 e nao filosofo 0

testar(nfilosofo);

sem_post(&mutex);

sem_wait(&S[nfilosofo]);

sleep(1);

}

void deixaGarfo(int nfilosofo)

{

sem_wait(&mutex);

estado[nfilosofo]=PENSAR;

printf("Filosofo %d deixou os garfos %d e %d.\n", nfilosofo+1, ESQUERDA+1, nfilosofo+1);

printf("Filosofo %d esta a pensar.\n", nfilosofo+1);

testar(ESQUERDA);

testar(DIREITA);

sem_post(&mutex);

}

void testar(int nfilosofo)

{

if(estado[nfilosofo]==FOME

...

Baixar como (para membros premium)  txt (2.1 Kb)   pdf (33.3 Kb)   docx (8.3 Kb)  
Continuar por mais 1 página »
Disponível apenas no TrabalhosGratuitos.com