Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект 58 страниц 2002.doc
Скачиваний:
91
Добавлен:
15.06.2014
Размер:
4.07 Mб
Скачать

Задача “производитель-потребитель” (буфер ограниченНый)

Производитель и потребитель связаны через буфер ограниченной емкости в N порций. ЧПП - число пустых порций.

begin

integer ЧПБ, ЧПП, РБ;

ЧПБ:=0; ЧПП:=N; РБ:=1;

parbegin

производитель: begin

n1: производство новой порции;

P(ЧПП);

P(РБ);

добавление порции к буферу;

V(РБ);

V(ЧПБ);

goto n1;

end;

потребитель: begin

n1: P(ЧПБ);

P(РБ);

взятие порции из буфера;

V(РБ);

V(ЧПП);

обработка взятой порции;

goto n2;

end;

parend;

end.

Порядок р-операций и у производителя, и у потребителя имеет значение.

Взаимодействие через переменные состояния

Исходные положения:

  1. Можно определять отдельные процессы;

  2. Процессы могут взаимодействовать друг с другом через общие переменные;

  3. Имеются средства синхронизации процессов.

Замечания:

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

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

Постановка задачи:

Рассматриваются производители, которые выдают порции информации различного размера, размер порции выражается в некоторых единицах. Потребители обрабатывают последовательные порции из буфера и умеют обрабатывать порции, размер которых заранее не определён. Максимальный размер буфера определён в единицах информации, а не в количестве порций, как в предыдущей задаче. Размер буфера - не менее максимального размера порции информации. Так как буфер ограничен, может оказаться, что производитель должен будет ждать того момента, когда он сможет поместить в буфер произведённую порцию. Если имеется более одного производителя и какой-то из них ждет из-за отсутствия достаточного места в буфере, то другие производители могут продолжать работу и достигнуть точки, когда они желают выдать выработанную порцию информации в буфер.

С целью придания определённости решению этой задачи к решению предъявляются следующие требования:

- производитель, предлагающий большую порцию, получает приоритет по отношению к производителю, предлагающему меньшую порцию (когда порции одинаковы - безразлично);

- если какой-то производитель находится в состоянии ожидания потому, что его порцию нельзя разместить в буфере, то никакой другой производитель не сможет добавить свою порцию в буфер до момента появления дополнительного свободного места потому, что если его порция больше, то её некуда разместить, а если меньше, то он имеет более низкий приоритет.

Дано: N  производителей; M  потребителей; RB  размер буфера.

begin