🐥

分散処理を勉強した記録~その33~

2021/05/15に公開

この記事は、
「分散処理システム」著:真鍋義文 森北出版株式会社
を参考にしています。

今回は「リーダー選挙問題を解く自己安定アルゴリズム」についてです。
前回のアルゴリズムの場合、
leader変数を書き換えられると誰も選出されない問題がありました。

そこで、リーダーまでの距離「distance」をパラメータに追加します。
distanceは定数なので書き換えないものとします。
上記の例だとIDが3のプロセスをリーダーとしているので、
左側のプロセスになるほど、distanceの値は大きくなります。

初期状態だと、distanceの値はそれぞれ0になります。

P2がP3の値を読み取ります。
(0 <= P2のdistance < (N-1)) && ((P2のleader < P3のleader) || (P2のleader == P3のleader && P2のdistance < P3のdistance))
の場合、leaderをP3の値にし、
distanceはP3の「distance」の値+1したものをP2の「distance」に設定します。

ここで、全体のプロセス数Nは「3」です。
P2の「leader」を「3」に、「distance」を「1」にします。

同様に、P1がP2の値を読み取ります。

すると、P1の「leader」と「distance」はそれぞれ書き換わります。

ここで、P2の「leader」の値が何らかの故障で「4」になったとします。

再度P1がP2の値を読み取ります。

P1の「leader」は「4」になりますが、
「distance」は変化しません。

P2がP1を読み取ります。

P1とP2のleaderの値は同じなので、
遷移条件を満たします。

P1のdistanceに+1したものがP2のdistanceに設定されます。
distanceがN-1より大きくなることは有り得ないので、
P2のパラメータは初期化されます。

以上で終わりです。ありがとうございました。

Discussion