Задача 15. O клумбе – 1. На клумбе растет 40 цветов, за ними непрерывно следят два процесса–садовника
и поливают увядшие цветы, при этом оба садовника очень боятся полить один и тот же цветок,
который еще не начал вянуть.
Создать приложение, моделирующее состояния цветков на клумбе и действия садовников.
Для изменения состояния цветов создать отдельный процесс (а не 40 процессов для каждого цветка),
который может задавать одновременное начало увядания для нескольких цветков.
- На момент начала моделирования все цветы политы.
- Каждое утро каждый политый цветок с вероятностью 1/2 начинают увядать.
- Во избежание траура будем считать, что увядший цветок просто некрасивый и никогда не умрет
- Днем два Садовника Alice и Bob просыпаются и идут слева направо вдоль клумбы и поливают увядшие цветы.
- У садовником могут быть лейки разных размеров (задается как параметр) стандартно у Alice для 5-ти цветов, а у BOb-a только 4.
- Если цветок поливается одним садовникам, то другой не будет его поливать благодаря pthread семафору.
- Садовники не стареют, а цветы никогда не умрут - процесс может длиться вечность)
По сравнению с ИДЗ-3 тут ничего не поменялось Для простоты запуска в каждой папке есть Make файл и Bash скрип.
Скрипт компилирует и запускает всех клиентов и сервер с перенаправлением вывода в файл.
При запуске Bash скрипта процесс начинается автоматически, но для появления выходных файлов необходимо его прервать. (CTRL + C)
В папке sample лежат примеры работы
В этот раз я начал делать с конца)
- Код клиента-клумбы
- Код клиента-садовника
- Код клиента-принтера
- Код сервера
- Код скрипта запуска
- Код Makefile
Все соединения между клиентом и серверами - UDP. Для различия сервером первая буква запроса - тип.
- A/B - запрос полива цветов от Алисы или Боба соответственно.
- N - Запрос "начало нового дня", те обновление информации у садовников о завядших цветах.
- F - Запрос от цветника, те обновление информации о завядших цветах на сервере.
Есть возможность для подключения до 10 "принтеров" выводящих все сообщения в одной консоли.
- Код клиента-клумбы
- Код клиента-садовника
- Код клиента-принтера
- Код сервера
- Код скрипта запуска
- Код Makefile
Для добавления только 1 принтера меняем константу количества на 1.
Меняем константу на 0))