This is a 21 School/Ecole 42 Project
Philo is a program that visualises dining philosophers with status logs in terminal. In computer science, the dining philosophers problem is an example problem often used to illustrate synchronisation issues and techniques for resolving them.
- Introducing the problem of deadlock
- Understand the difference between threads and processes
- Learn about mutexes and semaphores
- One or more philosophers sit at a round table. There is a large bowl of spaghetti in the middle of the table.
- The philosophers alternatively
eat
,think
, orsleep
. While they are eating, they are not thinking nor sleeping; while thinking, they are not eating nor sleeping; and, of course, while sleeping, they are not eating nor thinking. - There are also forks on the table. There are as many forks as philosophers.
- Each philosopher needs to hold two forks simultaneously to eat.
- When a philosopher has finished eating, they put their forks back on the table and start sleeping. Once awake, they start thinking again.
- The simulation stops when a philosopher dies of starvation.
- Philosophers don’t speak with each other.
- Philosophers don’t know if another philosopher is about to die.
- No need to say that philosophers should avoid dying!
- Each philosopher is a thread.
- A fork lies between each philosopher.
- Each fork is a mutex.
- Each philosopher is a process.
- All forks lie at the center of the table.
- Forks are represented by semaphores.
Run the following commands in Terminal:
# to build
> make
# to run
> ./philo 21 800 200 100 10
number_of_philosophers
: The number of philosophers and also the number of forks.
time_to_die (in milliseconds)
: If a philosopher didn’t start eating time_to_die milliseconds since the beginning of their last meal or the beginning of the simulation, they die.
time_to_eat (in milliseconds)
: The time it takes for a philosopher to eat. During that time, they will need to hold two forks.
time_to_sleep (in milliseconds)
: The time a philosopher will spend sleeping.
[number_of_times_each_philosopher_must_eat]
(optional argument): If all philosophers have eaten at least number_of_times_each_philosopher_must_eat times, the simulation stops. If not specified, the simulation stops when a philosopher dies.
- Philosophers visualiser