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.
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
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.
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
Compile o programa através do Makefile usando o comando make
na raiz do repósitorio
Exemplo:
$ ./philo 4 410 200 200
O estilo de código utilizado neste projeto é o Norminette criado pela escola 42.
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)