分布式计算-safra算法检测终止性

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

1、

规则M:当发送消息时,进程P增加它的消息计数器增加1.当接收一条消息时,进程P的消息计数器减少1。

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

规则2:接收进程变成黑色。

规则3:当黑色进程转发令牌时,令牌变成黑色。

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

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

3、算法:

var statep:(active,passive);

      colorp:(white,black);

      mcp:integer init 0;

 

Sp:{statep=active}

        begin send <mes>;

                   mcp:=mcp+1(*Rule M*)

         end

 

Rp:{A message <mes> has arrived at p}

     begin receive <mes>;statep:=active;

               mcp:=mcp-1;(*Rule M*)

               colorp:=black (*Rule 2*)

     end

   

Ip:{statep=active}

    begin statep:=passive end

 

start the detection,executed once by p0:

        begini send <tok,white,0> 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)∧(mcp+q=0)

                               then Annouce

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

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

                               then send <tok,c,q+mcp> to Nextp

                               else send <tok,black,q+mcp> to Nextp;

              colorp:=white (*Rule 5*)

       end

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