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