分布式计算-Rana算法

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

1、假设进程装有时钟,为此,可用硬件时钟和Lamport逻辑时钟。

2、quiet定义

quiet(p)=>statep=passive∧传输中没有进程p发送的基本消息<=>statep=passive∧unackp=0

3、对于每个时刻t中的某一点,检查是滞所有进程在时刻t处于静止状态。由此得t时刻的终止性。每个进程只执行同一个检测算法。进程可以开始各自的波动,这些波动并发执行。当变成静止时,进程p存储静止时刻的时间qtp,并开始一次波动,检查自qtp时刻以来,所有进程是否已经静止。如果是,则检测出终止。否则将会有一个稍后会变成静止的过程,并开始新一轮的波动。

4、算法

var statep:(active,passive);

       θp:integer init 0;(*logical clock*)

        unackp:integer init 0;(*number of unacknowledged messages*)

        qtp:integer init 0;(*Time of most recent transition to quiet*)

 

Sp:{statep=active}

        begin    θp:=θp+1; send <mes,θp>;unackp:=unackp+1     end

 

Rp:{A message <mes,θ> from q has arrived at p}

     begin receive <mes,θ>;θp:=max(θp,θ)+1;

               send <ack,θp> to q;statep:=active;

     end

   

Ip:{statep=active}

    begin θp:=θp+1;statep:=passive

             if unackp=0 then (*p becomes quiet*)

                begin qtp:=θp ;send <tok,θp,qtp,p> to nextp  end

     end

 

Ap:{An ackonwledgegement <ack,θ> has arrived at p}

     begin receive <ack,θ> ;θp:=max(θp,θ)+1;

               unackp:=anackp-1;

               if unackpp=0 and statep=passive then (*p becomes quiet*)

                  begin qtp:=θp;send <tok,θp,qtp,p> to Nextp end

     end

 

Tp: {A token <tok,θ,qt,q> has arrived at p}

       begin receive <tok,θ,qt,q>;θp:=max(θp,θ)+1;

                if quiet(p) then

                    if p=q then Annouce

                    else if qt>=qtp then send <tok,θp,qt,q> to Nextp

       end

 

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