Skip to content

Solving and implementing the solution of the dining philosophers problem (using threads and mutexes)

Notifications You must be signed in to change notification settings

Dronoti/philosophers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Проект "Philosophers"

macOS Terminal GitHub Generic badge

Описание проекта

Всем привет ✌️

Цель этого проекта - изучение и применение на практике многопоточного программирования, а также правильного использования общих данных между потоками. В качестве примера выступает решение задачи об обедающих философах. Это классический случай разделения ресурсов в программировании - ключевой проблемой является образование deadlock'a (взаимной блокировки) и невозможности дальнейшего выполнения программы. В данном проекте эта проблема решается с помощью использования мьютексов.

Постановка задачи

Несколько философов сидят вокруг круглого стола, перед каждым из них стоит тарелка спагетти. Вилки лежат на столе между каждой парой ближайших философов. Каждый философ может либо есть, либо размышлять, либо спать. Приём пищи не ограничен количеством оставшихся спагетти — подразумевается бесконечный запас. Тем не менее, философ может есть только тогда, когда держит две вилки — взятую справа и слева.

Каждый философ может взять ближайшую вилку (если она доступна) или положить её (если он уже держит вилку). Взятие каждой вилки и возвращение её на стол являются раздельными действиями, которые должны выполняться одно за другим. Цель задачи заключается в том, чтобы разработать модель поведения (параллельный алгоритм), при котором каждый из философов будет чередовать приём пищи, сон и размышления.

philosophers

Использование

Запуск:

git clone https://github.com/Dronoti/philosophers.git philosophers && cd philosophers && cd philo && make && make clean && ./philo 3 310 200 100

Программа принимает на вход 4 обязательных и 1 необязательный параметр:

  • количество философов;
  • время, которое каждый из философов может прожить без приема пищи (в миллисекундах);
  • время, которое тратит каждый из философов на прием пищи (в миллисекундах);
  • время, которое необходимо каждому из философов на сон (в миллисекундах);
  • количество раз, сколько каждый из философов должен поесть для успешного завершения программы (необязательный параметр).

Программа завершается если хотя бы один из философов умрет или каждый из них поест заданное количество раз.

Демонстрация

project demonstration

Дополнительно

Подробная функциональность программы, ограничения и требования к ее реализации описаны в задании.

About

Solving and implementing the solution of the dining philosophers problem (using threads and mutexes)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published