n1: производство новой порции;
P(ЧПП);
P(РБ);
добавление порции к буферу;
V(РБ);
V(ЧПБ);
goto n1;
end;
Потребитель: begin
n2: P(ЧПБ);
P(РБ);
взятие порции из буфера;
V(РБ);
V(ЧПП);
обработка взятой порции;
goto n2;
end;
parend;
end;
И производитель и потребитель решают через РБ задачу взаимного исключения. Проблема производителя: нельзя писать в заполненный буфер. Проблема потребителя: нельзя читать из пустого буфера. Производитель решает свою проблему с использованием общего семафора ЧПП (число пустых порций), а потребитель ¾ через ЧПБ (число порций в буфере).
Взаимодействие через переменные состояния
Исходные данные.
Можно определять и формировать отдельные процессы.
Процессы могут связываться друг с другом через общие переменные.
Имеются средства синхронизации.
При взаимодействии процессов могут возникать решения, которые касаются более чем одного процесса. Не всегда очевидно, какое решение будет принято. Если не найден какой-то руководящий принцип (например, критерий эффективности), то с целью определённости нужно установить некоторые ограничения.
|
|
Если разрабатываются реально работающие системы, то требуется убедиться в корректности решения. При параллельном программировании использование проверяющих тестов затруднено, поэтому вопросы проверки правильности решения должны рассматриваться в самых начальных этапах проектирования системы.