Шаг 12.
Сети Петри. Системы параллельных взаимодействующих процессов, моделируемых сетями Петри. Задача о производителе/потребителе

    На этом шаге мы рассмотрим задачу о производителе/потребителе.

    В задаче о производителе/потребителе также присутствует совместно используемый объект, но в этом случае разделяемый объект точно определен и является буфером. Процесс-производитель создает объекты, которые помещаются в буфер. Потребитель ждет, пока объект не будет помещен в буфер, удаляет его оттуда и использует. Такая ситуация может быть промоделирована сетью Петри так, как показано на рисунке 1. Позиция B представляет собой буфер, каждая фишка соответствует элементу данных, который произведен, но еще не использован.


Рис.1. Задача о производителе/потребителе, моделируемая сетью Петри

    Один из вариантов этой задачи - это задача о нескольких производителях/потребителях. В этом случае несколько производителей порождают элементы данных, помещаемые в общий буфер, для нескольких потребителей. На рисунке 2 представлено решение этой задачи в виде сети Петри.


Рис.2. Задача о нескольких производителях/потребителях

    Эта сеть совпадает с сетью на рисунке 1, за исключением того, что представления s производителей и t потребителей мы начали выполнение сети с s фишками в начальной позиции процесса-производителя и t фишками в начальной позиции процесса-потребителя. Таким образом, мы представляем s производителей и t потребителей, реализуемых совместно используемыми программами. Альтернативой было бы дублирование программного кода для процессов производителя и потребителя, однако, результатом этого при том же самом поведении была бы гораздо большая сеть.

    В другом варианте задачи о производителе/потребителе используется буфер ограниченного размера. При такой постановке задачи буфер между производителем и потребителем ограничен, т.е. имеет только n ячеек для элементов данных. Производитель не может постоянно работать с той скоростью, которая ему нужна, а вынужден ждать, если потребитель работает медленно и буфер заполнен. На рисунке 3 показано решение этой проблемы.


Рис.3. Задача о производителе/потребителе с ограниченным буфером

    Ограниченному буферу сопоставляется две позиции: B представляет количество элементов данных, которые произведены, но еще не использованы (число заполненных ячеек), B' - количество пустых ячеек в буфере. Первоначально B' имеет n фишек, а B фишек не имеет. Если буфер заполнен, то B' фишек не имеет, а B имеет n фишек. Если теперь производитель попытается поместить еще один элемент данных в буфер, то он будет остановлен, так как в B' нет фишки, делающей этот переход разрешенным.

    На следующем шаге мы рассмотрим заадачу об обедающих мудрецах.




Предыдущий шаг Содержание Следующий шаг