集中式基本计算-Dijkstra-Scholten算法检测终止性

当算法达到终止配置时,分布式算法的计算终止,即配置中不存在进一步可应用的算法步,每个进程处于允许接收的状态,且所有信道为空,即消息终止,则这个配置是终止的。

集中式基本计算是指每个初始状态,只有一个活动进程。

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

你可能感兴趣的:(算法,活动)