Реферат: Системы, управляемые потоком данных. Язык Dataflow Graph Language.
Для каждого процесса нунжно создать файл-шаблон. Имя такого файла совпадает с именем процесса и имеет расширение frm (можно воспользоваться файлом Process.frm). В нашем случае имеем три файла: Manager.frm, Worker.frm и Summer.frm. В каждом файле есть процедура, имя которой заканчивается на Body. Внутри нее записывается тело процесса.
10 PROCEDURE ManagerBody;
11 VAR
12 Task : RECORD N:cardinal; a,b:real; END;
13 i,WrkId : cardinal;
14 CONST
15 N : cardinal = 10;
16 BEGIN
17 exportNumIter[0].Send (N, SizeOf(N));
18 Task.N := 10*N;
19 Task.b := 0;
20 FOR i := 1 TO N DO BEGIN
21 Task.a := Task.b;
22 Task.b := i * 1.0 / N;
23 importDemandList.Receive (WrkId, SizeOf(WrkId));
24 exportWorker[WrkId].Send (Task, SizeOf(Task));
25 END;
26 Task.N := 0;
27 FOR i := 1 TO exportWorker.NChannels DO
28 exportWorker[i-1].Send (Task, SizeOf(Task));
29 END;
Файл Manager.frm : телопроцесса Manager
Переменная Task описывает задание для рабочего процесса: a,b - границы, N - число интервалов. Константа N, описанная в строке 15, равна числу разбиений отрезка [0;1].
В начале работы посылаем процессу Summer число разбиений N (строка 17) . В строке 23 ждем запроса от одного из рабочих процессов. Запрос представляет собой идентификатор запрашивающего процесса. Получив запрос, отсылаем очередное задание соответствующему рабочему (строка 24).
После того, как задания распределены, нужно сообщить об этом всем рабочим процессам. Для этого служат строки 26-28: по всем каналам порта exportWorker посылаем задание с нулевым числом интервалов - сигнал о завершении работы.
30 PROCEDURE WorkerBody;