终止检测-基于Dijkstra-Feijen-Van Gasteren算法

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

1、Dijkstra-Feijen-Van Gasteren算法利用同步消息传递,检测基本计算的终止性。

2、

规则1:只有进程处于被动状态,它才处理令牌。

规则2:发送进程变成黑色。(发送基本消息意味着该进程处于活动,消息没有实现终止)

规则3:当黑色进程转发令牌时(除非进程p0),令牌变成黑色。

规则4:当波动不成功结束时,p0开始新一次波动(在上一次波动中,有消息仍在信道中运行,仍有进程在活动)

规则5:在发送令牌之后,每个进程接着变成白色。

3、算法:

var statep:(active,passive);

      colorp:(white,black);

 

Cpq:{statep=active}

        begin (*p sends a basic message,which is received by q*)

                   colorp:=black;(*Rule 2*)

                   statep:=active

         end

 

Ip:{statep=active}

    begin statep:=passive end

 

start the detection,executed once by p0:

        begini send <tok,white> to pN-1 end

 

Tp:(*Process p handles the token <tok,c>*)

      {statep=passive}(*Rule 1*)

       begin if p=p0

                   then if (c=white∧colorp=white)

                               then Annouce

                               else send <tok,white> to pN-1 (*Rule 4*)

                    else if (colorp=white)   (*Rule 3*)

                               then send <tok,c> to Nextp

                               else send <tok,black> to Nextp;

              colorp:=white (*Rule 5*)

       end

你可能感兴趣的:(C++,c,算法,活动,C#)