Сопрограммы

В некоторых системах две или более задач должны обрабатываться посегментно, причем каждый сегмент выполняется с различной скоростью (рис. 7.4).

Рис. 7.4 — Организация сопрограмм

Использование сопрограмм может быть полезной управляющей структурой.

Сопрограмма — это такой вид программы, который сохраняет текущее состояние счетчика команд. Когда программа вызывается повторно, выполнение продолжается с адреса, записанного в счетчике программ, а не с начала программы.

Сопрограмма, возвращающая управление в процедуру X, определяется как resume X. Использование такого оператора языка PDL можно представить следующим образом:

call DATA;

goto Next_Statement;

/* Для элементов данных */

DATA: procedure;

declare FS, DV;

DV = значение данных 1;

resume FORMAT(FS);

call I/O – process(DV, FS);

DV = значение данных 2;

resume FORMAT(FS);

call I/O – process(DV, FS);

...

DV = значение данных n;

call I/O – process(DV, FS);

end DATA;

FORMAT: procedure(FS);

LOOP: FS = спецификация формата 1;

resume DATA(FS);

FS = спецификация формата 2;

resume DATA(FS);

...

FS = спецификация формата n;

goto LOOP;

end FORMAT;

Next_Statement:

...

Здесь каждая сопрограмма вызывает другую сопрограмму. Таким образом, программа обработки данных вызывает программу обработки формата до следующего элемента формата.

К сожалению, сопрограммы отсутствуют в широко распространенных языках программирования.