МОДЕЛИРОВАНИЕ ВЗАИМОДЕЙСТВИЯ ПАРАЛЛЕЛЬНЫХ ПРОЦЕССОВ Монитор — в языках программирования, высокоуровневый механизм взаимодействия и синхронизации процессов, обеспечивающий доступ к неразделяемым ресурсам. Подход к синхронизации двух или более компьютерных задач, использующих общий ресурс, обычно аппаратуру или набор переменных. При многозадачности, основанной на мониторах, компилятор или интерпретатор прозрачно для программиста вставляет код блокиров-ки-разблокировки в соответствующим образом оформленные процедуры, избавляя программиста от явного обращения к примитивам синхронизации. Монитор состоит из: набора процедур, взаимодействующих с общим ресурсом мьютекса переменных, связанных с этим ресурсом инварианта, который определяет условия, позволяющие избежать состояние гонки. Процедура монитора захватывает мьютекс перед началом работы и держит его или до выхода из процедуры, или до момента ожидания условия. Если каждая процедура гарантирует, что перед освобождением мьютекса инвариант истинен, то никакая задача не может получить ресурс в состоянии, ведущем к гонке. Чтобы избегать состояния активного ожидания, процессы должны сигнализировать друг другу об ожидаемых событиях. Мониторы обеспечивают эту возможность с помощью условных переменных. Когда процедура монитора требует для дальнейшей работы выполнения определенного условия, она ждет связанную с ним условную переменную. Во время ожидания она временно отпускает мьютекс и выбывает из списка исполняющихся процессов. Любой процесс, который в дальнейшем приводит к выполнению этого условия, использует условную переменную для оповещения ждущего ее процесса. Оповещенный процесс захватывает мьютекс обратно и может продолжаться. Поскольку ожидание условия отпускает блокировку, ожидающий процесс должен гарантировать соблюдение инварианта, перед тем как начать ожидание. Задание: Выполнить задачу «Голодные птицы» с помощью механизма синхронизации Монитор на языке Си+комментарии “Голодные птицы” Есть N птенцов и их мать. Птенцы едят из общей миски, в которой сначала находятся F порций пищи. Каждый птенец съедает порцию еды, спит некоторое время, затем снова ест. Когда кончается еда, птенец, питавшийся последним, зовет мать. Птица наполняет миску F порциями еды и снова ждет, пока миска опустеет. Эти действия повторяются без конца. Представьте птиц процессами и разработайте код, моделирующий их действия. Для синхронизации используйте указанный в варианте механизм.