Данный проект представляет из себя несколько разновидностей задач об обедающих философах
Прежде чем приступить к проекту, я очень долго узнавал про многопоточность и многопроцессорность, а так же долго планировал выполнение
Прежде чем я опишу задачу на русском, советую ознакомиться с subject.pdf
Первая задача представляет собой обычный вариант задачи об обедающих философах, когда несколько философов сидят за круглым столом и кушают спагетти двумя вилками(Справа и слева)
Что бы лучше представить это перейдите по ссылке с моим планом
Сложность всех задачь об обедающих философах заключается в том, что каждый философ возьмет по одной вилке, и тогда они все будут ждать второй, когда та будет находиться в руке у соседа. Такое состояние называется deadlock
Что бы философы правильно брали вилки и пользовались остальными общими ресурсами, не мешаю друг другу, в первой программе разрешено пользоваться мьютексами
Так же, что бы не было состояние deadlock, которое я описал выше, я поставил таймер на начало еды каждого второго философа. Таким образом, сначала кушают философы под нечетными номерами, а потом под четными
Со вторыми философами дела обстоят иначе. Принцип задачи меняется так, что все вилки лежат в центре стола и любой философ может взять вилку любого философа. Но deadlock не пропадает и, что бы решить его я применил одно из наиболее популярных решений - метод оффицианта. То есть, философы не сами берут 2 вилки из центра стола, а просят оффицианда дать им вилки.
Тут требуется использовать семафоры, которые, в отличие от мьютексов, имею количество
В программе philo_three усложнение задачи philo_two так, что философы - это отдельный дочерний процесс, в котором находится их поток... Данную задачу я решил похожим методом с первой, но не советую запускать ее с 200+ философами.
Что бы запустить одну из симуляций, перейдите в папку симуляции(cd philo_one)
Введите в консоли make, что бы Makefile собрал проект.
Зпустите программу с параметрами (1. Количество философов. 2. Время жизни каждого философа. 3. Время, которое философ потратит на трапезу. 4. Время, которое философ должен спать. 5. Этот аргумент является опциональным, если он есть, то философ, который поел количество раз, указанное тут, встает и уходит из-за стола, тем самым освобождая вилки)(./philo_one 4 410 200 200(В данном случае 4 философа будут жить 410мс, а кушать и спать по 200мс))
Таймер жизни обновляется, когда философ поел
Данный проект - моя личная собственность и я запрещаю копировать код участникам Ecole 42 и School 21