当算法达到终止配置时,分布式算法的计算终止,即配置中不存在进一步可应用的算法步,每个进程处于允许接收的状态,且所有信道为空,即消息终止,则这个配置是终止的。
集中式基本计算是指每个初始状态,只有一个活动进程。
1、算法动态地维持一棵计算树T=(VT,E)
1)或者T为空,或者T是一棵根为p0的有向树。
2)集合VT包括 所有活动进程,以及传输中的所有基本消息。
2、当发送一条消息,或者不在树中的进程变成活动时,必须对T进行扩展。当P发送基本消息<mes>时,则<mes>被插入到树中,且<mes>的父节点为p。当不在树中的进程p,由于接到来自进程q的消息变成活动时,q变成父节点,将消息表示为<mes,q>表示q发送的消息。
3、以下原因必须从T中删除节点。进程有个变量对子节点计数
1)当接到一条基本消息时,将它删除。
2)为了保证检测算法的进行,在终止后的有限步内,树必须解体
4、算法
var statep:(active,passive) init if p=p0 then active else passive;
scp:integer init 0;
fatherp:P init if p=p0 then p else udef;
Sp: {statep=active}
begin send <mes,p>;scp:=scp+1 end
Rp:{A message <mes,q> has arrived at p}
begin receive <mes,q>;statep:=active;
if fatherp=udef then fatherp:=q else send <sig,q> toq
end
Ip:{statep=active}
begin statep:=passive;
if scp=0 then
begin if fatherp=p
then annouce(*宣布终止*)
else send <sig,fatherp> to fatherp;
fatherp=udef;
end
Ap:{<sig,p> arrivates at p}
begin receive <sig,p>;scp=scp-1;
if scp=0 and statep=passive then
begin if fatherp=p(*就是当前的树只有根节点P了*)
then announce
else send <sig,fatherp> to fatherp;
fatherp:=udef
end
end