Спектакль 03 Название
Example03: Буфер между процессами
Примечание
Этот и три последующих примера внешне очень похожи - формы всех примеров наследуются от базовой формы и все процессы этих примеров порождаются от базовых процессов (файлы PMU.pas и PMU.dfm)
Взаимодействующие лица
* Циклический процесс Плюс - генерирует последовательность положительных целых чисел (от нуля с шагом 1). Промежуток времени между генерацией двух соседних чисел задается случайной паузой.
* Циклический процесс Минус - тезка предыдущего, генерирует последовательность отрицательных целых чисел.
* Циклический процесс Пользователь (потребитель) - служит получателем данных от процессов-производителей Плюс и Минус и выводит полученные данные на экран. Процесс может принимать данные только раз в полсекунды.
* ГалаКонтейнер с незамысловатым именем Буфер - может хранить посланные ему от производителей числа и отдавать их потребителю.
Декорации
Нет
Сценарий
Очень прост - двое производят, третий потребляет, а четвертый работает складом готовой продукции. Интрига сюжета в том, что Буфер имеет ограниченную емкость, а все три процесса могут создаваться независимо друг от друга и фактически ничего не знают друг о друге. Процессы-производители могут передавать свои данные только в том случае, если в буфере есть место, процесс-потребитель может что-то взять из буфера, если он не пуст, в остальных случаях процессы вынуждены ждать.
Цель примера
Показать взаимодействие нескольких асинхронных процессов с помощью разделяемого ресурса - буфера, который и является ключевой фигурой в сюжете.
Рассмотрим буфер подробнее: