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

UptoLike

ФИЛЬТРЫ СОРТИРОВКИ СЛИЯНИЕМ
optype stream=(int); # тип операций с потоком данных
module Merge[i=1 to n]
op in1 stream, in2 stream; # входные потоки
# (экспортируемые операции)
op initialize (cap stream); # ссылка на входной поток
body
int v1,v2; # входные значения из потоков 1 и 2
cap stream out; # мандат доступа ко входному потоку
sem empty1=1, full1=0, empty2=1, full2=0;
proc initialize(output) { # обеспечить выходной поток
out=output;
}
proc in1(value1) { # создать новое значение для потока 1
P(empty1); v1=value1; V(full1);
}
proc in2(value2) { # создать новое значение для потока 2
P(empty2); v2=value2; V(full2);
}
process M {
P(full1), P(full2); # ожидать два входных значения
while(v1!=EOS and v2!=EOS)
if(v1<=v2)
{call out(v1); V(empty1); P(full1);}
else # v2<v1
{call out(v2); V(empty2); P(full2);}
# считывание остатка непустого входного канала
if(v1==EOS)
while(v2!=EOS)
{call out(v2); V(empty2); P(full2);}
else # v2==EOS
while(v1!=EOS)
{call out(v1); V(empty1); P(full1);}
call out(EOS); # присоединить маркер конца
end Merge
Описанная программа в два раза длиннее аналогичной програм-
80