Технология программирования для распределенных параллельных систем. Демьянович Ю.К - 34 стр.

UptoLike

process Client[i=0 to n-1]{
send request(i, [аргументы-значения]);
# - вызов op
receive reply[i]([аргументы для результатов]);
# - ожидания ответа
}
Заметим, что каналы глобальны по отношению к процессам,
так что к каналам можно обращаться непосредственно (статиче-
ское именование).
Динамическое именование также может быть применено: каж-
дый клиент создает собственный канал ответа, передавая его в пер-
вом поле запроса. В э том случае у других процессов не будет до-
ступа к ответу.
Заметим, что если м онитор имеет несколько процед ур, то в со-
общении запроса должно быть указание, какую операцию (проце-
дуру) вызывает клиент. У различных операций могут быть разные
наборы аргументов: это требует прог рамм ир ования записей с вари-
антами и объединениями.
type op_kind=enum(op_1, ..., op_n);
# объявление перечисляемого типа
type arg_type=union(arg_1, ..., arg_n);
# объявление типа объединения
#(резервирование одного пространства)
type res_type=union(res_1, ..., res_n);
# объявление типа объединения
#(резервирование одного пространства)
chan request(int clientID, op_kind, arg_type);
# канал запросов
chan reply[n](res_type);
# массив каналов ответов
process Server {
int clientID; op_kind kind; arg_type args;
res_type results; [объявление других переменных];
[код инициализации];
while (true){ ## инвариант цикла
35