Skip to content

Implementação de Conceitos Básicos de Threads e Mutex. Com Base No “Problema Jantar Dos Filósofos”, Originalmente Formulado Por Edsger Dijkstra.

Notifications You must be signed in to change notification settings

andersonhsporto/ft-philosophers

Repository files navigation

ft-philosophers

 Implementação de conceitos básicos de threads e mutex.
ft-philosophers utiliza como base o "problema Jantar dos filósofos", originalmente formulado por Edsger Dijkstra.

Funções permitidas:

memset, printf, malloc, free, write, usleep, gettimeofday, 
pthread_create, pthread_detach, pthread_join, pthread_mutex_init, 
pthread_mutex_destroy, pthread_mutex_lock, pthread_mutex_unlock

Descriçao do problema:

Cinco filósofos estão sentados em uma mesa redonda para jantar.
Cada filósofo tem um prato com espaguete à sua frente.
Cada prato possui um garfo para pegar o espaguete.
O espaguete está muito escorregadio e, para que um filósofo consiga comer, será necessário utilizar dois garfos.
Nesse sentido, cada filósofo alterna entre duas tarefas: comer ou pensar.
Quando um filósofo fica com fome, ele tenta pegar os garfos à sua esquerda e à sua direita;
um de cada vez, independente da ordem.
Caso ele consiga pegar dois garfos, ele come durante um determinado tempo e depois recoloca os garfos na mesa.
Em seguida ele volta a pensar.

Argumentos:

O programa recebe os seguintes argumentos ao executar o binário philo.

Argumento Descrição
number_of_philosophers Número de filósofos e de garfos.
time_to_die O tempo (em milissegundos) desde o início da última refeição ou o início da simulação, após o qual um filósofo morrerá de fome.
time_to_eat O tempo (em milissegundos) em que filósofo leva para comer. Durante esse tempo, eles precisam segurar dois garfos.
time_to_sleep O tempo que um filósofo passará dormindo.
number_of_times_each_philosopher_must_eat Este argumento é opcional. Se todos os filósofos comerem pelo menos "number_of_times_each_philosopher_must_eat" vezes, a simulação para. Se não for especificado, a simulação para quando um filósofo morre.

Os argumentos são números inteiros e devem seguir a ordem desta tabela

Como executar:

Compile o programa através do Makefile usando o comando make na raiz do repósitorio

Exemplo:

$ ./philo 4 410 200 200

Estilo de código

O estilo de código utilizado neste projeto é o Norminette criado pela escola 42.

norminette

REFERÊNCIAS

Jantar dos filosofos - Problema de sincronização em Sistemas Operacionais

Code Vault: Playlist: Unix Threads in C - Video 1 (Short introduction to threads) - Video 7 (How to pass arguments to threads in C)

Jacob Sorber: Playlist: Programming with Threads - Video 1 (How to create and join threads in C) - Video 3 (Safety and Speed Issues with Threads)

About

Implementação de Conceitos Básicos de Threads e Mutex. Com Base No “Problema Jantar Dos Filósofos”, Originalmente Formulado Por Edsger Dijkstra.

Topics

Resources

Stars

Watchers

Forks