分布式计算-Korach-Kutten-Moran算法选举算法

本文介绍了一种令牌环网算法的实现细节,包括用级替代轮的概念,令牌的状态及其变化规则,以及遍历算法的具体流程。该算法通过定义令牌的不同状态(合并、追赶、等待)和级别来协调网络中节点的行为。

1、用级的概念代替轮的概念,仅当地2个令牌具有相同的级时,它们将引起新的遍历。新产生的令牌高出一级。如果令牌遇到高一级的令牌,或到达已被高一级令牌访问的节点,到达的令牌则简单地被杀死,而不影响更高一级的令牌。

2、每个令牌牌三种模式之一:合并(annex)、追赶(chase)、等待(wait)。

3、用(q,l)表示令牌,其中q表示令牌的初始进程,l表示它的级别。

4、lastp用于处于追赶模式的令牌,trav函数为遍历算法作用函数,返回令牌必须被转发到的近邻。

5、

var levp :integer init -1;

      catp,waitp:P init udef;

      lastp:Neighp init udef;

     

begin if p is initiator then

          begin levp:=levp+1;lastp:=trav(p,levp);

                    catp:=p;send <annex,p,levp> to lastp

         end;

      while .....(*终止条件*) do

              begin receive token (q,l);

                  if token is annexing then t:=A else t:=C;

                  if l>levp then (*Case I*)

                       begin levp:=l;catp:=q;

                                 waitp:=udef;lastp:=trav(q,l);

                                 send <annex,q,l> to lastp

                       end

                else if l=levp and waitp≠pudef then (*Case II*)

                           begin waitp:=udef;levp:=levp+1 ;lastp:=trav(p,levp);catp:=p;

                                     send <annex,p,levp> to lastp

                          end

                else if l=levp and lastp=udef then(*Case III*)

                       waitp:=q

                else if l=levp and t=A and q=catp then (*Case IV*)

                      begin lastp:=trav(q,l);

                                if lastp=decide

                                  then p annouces itself leader

                                  else send <annex,q,l> to lastp

                     end

                 else if l=levp and ((t=A and q>catp)or t=C) then (*Case V*)

                           begin send  <chase,q,l> to lastp;lastp:=udef end

                 else if l=levp then (*Case VI*)

                         waitp:=q

         end

end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值