Skip to content

[philosophers] project school 42. This project is an introduction to the basics of process threading, and how work on the same memory space.

Notifications You must be signed in to change notification settings

osmosx/philosophers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 

Repository files navigation

philosophers

It is classic task about dining philosophers problem. For do this task, you need know some rules:

  • One or more philosophers sit at a round table
  • The philosophers alternatively eat, think, or sleep. 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.
  • Because eating with only one fork is very inconvenient, a philosopher takes two forks to eat, one in each hand.
  • 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.
  • Every philosopher needs to eat and should never starve.
  • 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.

Programm take 4 or 5 arguments and looks like:

./philo number_of_philosophers time_to_die time_to_eat time_to_sleep number_of_times_each_philosopher_must_eat
  • 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.

In program runtime any state change of a philosopher must be formatted as follows:

timestamp_in_ms X has taken a fork
timestamp_in_ms X is eating
timestamp_in_ms X is sleeping
timestamp_in_ms X is thinking
timestamp_in_ms X died

timestamp_in_ms and X replace by:

  • timestamp_in_ms - the current timestamp in milliseconds
  • X - philosopher number (from 1 to number_of_philosopher)

Compilation:

make -C philo/

Example:

./philo 4 500 200 200
./philo 7 310 100 100 7

Docker

cd philo
docker build -t philo .
docker run philo 4 60 60 80 

About

[philosophers] project school 42. This project is an introduction to the basics of process threading, and how work on the same memory space.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published