0

Bully Coordinator 選挙アルゴリズムを実装しようとしています。このアルゴリズムでは、コーディネーターは 10 秒ごとにアライブ メッセージを送信し、すべてのプロセスはアライブを受信するまで少なくとも 14 秒間待機します。その時間内にメッセージを受信しない場合、デッド コーディネーターの選出が開始されます。

問題は、AliveTimer (Timer3_Count) が指数関数的に増加しており、アクティブなプロセスもそれに影響を与えていることです。どうして変な動きをするのかわからない。

最初のコーディネーターが Alive メッセージを送信している場合、カウンターは完全に機能しますが、コーディネーターが選出されなくなった後、奇妙な動作をします。

else if (Received_Text.Contains("Alive:"))
            {
                SetText(Received_Text + "\n");
                Coordinator_Alive = true;

                Timer3_Counter = 0;

                if (Alive_Count == 0)
                {
                    Alive_Count++;


                    AliveTimer.Interval = (1 * 1000);
                    AliveTimer.Enabled = true;
                    AliveTimer.Elapsed += new System.Timers.ElapsedEventHandler(AliveTimer_Elapsed);
                    AliveTimer.Start();

                }

            }

経過した関数はここにあります。プログラムに何か問題があると思います。すべてを試しました。

private void AliveTimer_Elapsed(object sender, EventArgs e)
    {
        Timer3_Counter++;
        SetTimer(Timer3_Counter.ToString());

        Random rnd = new Random();
        int rand_time = rnd.Next(14, 18);

        if (Timer3_Counter == 14)
        {
            AliveTimer.Stop();

            Timer3_Counter = 0;
            Alive_Count = 0;

            if (Coordinator_Alive == false)
            {
                byte[] buffer = Encoding.ASCII.GetBytes("Dead Coordinator Election: " + txName.Text);
                _clientSocket.Send(buffer);

                Timer4_Counter = 0;

                DeadTimer.Interval = (1 * 1000);
                DeadTimer.Elapsed += new System.Timers.ElapsedEventHandler(DeadTimer_Elapsed);
                DeadTimer.Enabled = true;
                DeadTimer.Start();

            }

        }

        if (Coordinator_Alive == true)
            Coordinator_Alive = false;

    }

そして死んだコーディネーター選挙コードはここにあります

else if (Received_Text.Contains("Dead Coordinator Election:"))
            {
                SetCPID("");
                Coordinator_Alive = false;
                Alive_Count = 0;
                Timer3_Counter = 0;

                AliveTimer.Stop();
                AliveTimer.Enabled = false;


                string output = Regex.Match(Received_Text, @"\d+").Value;
                SetText("Dead Coordinator Election Received from Process ID: " + output + "\n");

                if (Convert.ToInt32(txName.Text) > Convert.ToInt32(output))
                {
                    byte[] buffer = Encoding.ASCII.GetBytes("Greater Process No: " + txName.Text + " found than " + output + "\n");
                    _clientSocket.Send(buffer);
                    SetText("Our Process No: " + txName.Text + " is Greater than " + output + "\n");
                    Lower_Count++;

                    byte[] buffer1 = Encoding.ASCII.GetBytes("Dead Coordinator Election: " + txName.Text);
                    _clientSocket.Send(buffer1);
                }
                else
                {
                    byte[] Txt_Send = Encoding.ASCII.GetBytes("Our Process No: " + txName.Text + " is less than " + output);
                    _clientSocket.Send(Txt_Send);
                    Greater_Count++;
                }

            }

完全なコードはここで見つけることができます Bully Algorithm

注:各プロセスからメッセージをブロードキャストするためだけにパッシブサーバーを使用しています

4

1 に答える 1