Всем привет ✌️
Цель этого проекта - изучение и применение на практике многопоточного программирования, а также правильного использования общих данных между потоками. В качестве примера выступает решение задачи об обедающих философах. Это классический случай разделения ресурсов в программировании - ключевой проблемой является образование deadlock'a (взаимной блокировки) и невозможности дальнейшего выполнения программы. В данном проекте эта проблема решается с помощью использования мьютексов.
Несколько философов сидят вокруг круглого стола, перед каждым из них стоит тарелка спагетти. Вилки лежат на столе между каждой парой ближайших философов. Каждый философ может либо есть, либо размышлять, либо спать. Приём пищи не ограничен количеством оставшихся спагетти — подразумевается бесконечный запас. Тем не менее, философ может есть только тогда, когда держит две вилки — взятую справа и слева.
Каждый философ может взять ближайшую вилку (если она доступна) или положить её (если он уже держит вилку). Взятие каждой вилки и возвращение её на стол являются раздельными действиями, которые должны выполняться одно за другим. Цель задачи заключается в том, чтобы разработать модель поведения (параллельный алгоритм), при котором каждый из философов будет чередовать приём пищи, сон и размышления.
Запуск:
git clone https://github.com/Dronoti/philosophers.git philosophers && cd philosophers && cd philo && make && make clean && ./philo 3 310 200 100
Программа принимает на вход 4 обязательных и 1 необязательный параметр:
- количество философов;
- время, которое каждый из философов может прожить без приема пищи (в миллисекундах);
- время, которое тратит каждый из философов на прием пищи (в миллисекундах);
- время, которое необходимо каждому из философов на сон (в миллисекундах);
- количество раз, сколько каждый из философов должен поесть для успешного завершения программы (необязательный параметр).
Программа завершается если хотя бы один из философов умрет или каждый из них поест заданное количество раз.
Подробная функциональность программы, ограничения и требования к ее реализации описаны в задании.