Skip to content

rphlr/42-Philosophers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 

Repository files navigation

Philosopher's Problem

Overview

This program aims to solve the classic computer science problem known as the "Dining Philosophers" problem. The code is written in C and uses POSIX threads (pthreads) and mutex locks to simulate philosophers eating at a round table.

Code Explanation

The code follows the following steps:

  1. It creates the philosophers and assigns them a fork (which are modeled as mutex locks).
  2. It then creates a thread for each philosopher to perform a life cycle (eating, sleeping, and thinking).
  3. An overseer thread is used to monitor the philosophers' states and print out their current actions.

Each philosopher is modeled as a struct (t_philo) with properties like ID, current state, times to sleep/eat, etc. Similarly, a utility structure (t_utils) is used to hold the program start time and global stop conditions.

The main function verifies the input parameters (number of philosophers, time to sleep/eat, etc.) and then initializes the philosophers and their life cycles.

The life cycle (life_cycle function) of a philosopher involves picking up forks (mutex locks), eating, sleeping, and thinking in a loop until a stopping condition is reached. The status of each action is printed out.

A few important functions are:

  • can_pick_fork: Checks if a philosopher can pick up a fork.
  • eat, sleep, think: Simulate the actions of a philosopher.
  • init: Initialize the philosophers and their threads.
  • overseer: Monitors the philosophers' states and handles stop conditions.

Usage

The program expects the following command-line arguments:

  1. Number of philosophers
  2. Time until a philosopher dies without eating
  3. Time a philosopher needs to eat
  4. Time a philosopher needs to sleep
  5. (Optional) Number of times each philosopher must eat

Example: ./program_name 5 800 200 200 7

This would simulate 5 philosophers, where each philosopher would die if they don't start eating within 800 milliseconds, takes 200 milliseconds to eat, and sleeps for 200 milliseconds after eating. Each philosopher should eat 7 times.

Tips

  • Make sure your command-line arguments are valid numbers. The program doesn't check if the input parameters are valid numbers.
  • The program doesn't limit the number of philosophers, but having too many philosophers could lead to system performance issues.
  • This code uses POSIX threads and mutex locks, which are non-portable and may not work on non-POSIX systems.
  • This code doesn't include any error checking for the creation of threads or initialization of mutex locks. In a real-world application, it would be good to check the return values of these functions for any errors.
  • Make sure to have a basic understanding of threads, mutex locks, and the dining philosophers problem to understand this code.

Disclaimer

This code is provided as-is and may have potential bugs or undefined behaviors. Please use at your own discretion.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published