zoukankan      html  css  js  c++  java
  • paper4—Multi-MPE_Trigger_Algorithm


        Description: when SMD start, this algorithm will run as a deamon, two roles: Master, Slave. When the SMD is elected as a Master role, then, the MPE will be the master MPE accessed by other SMD, and related process data will backup to other SMD (Slave MPE).
    
        ctrl: Master or Slave, this value is set by batman-adv;
          ctrl=0, SMD is Slave role;
          ctrl=1, SMD is elected as a Master role;
    
        changed: Master or Slave, this value is set by batman-adv;
          changed=0, Master SMD is not changed, so, do not need to create thread in MAIN again for data synchronization;
          changed=1, Master SMD is changed, so, need to create thread in MAIN again for data synchronization;
    
        changed=0;
        is_me=-1;
        prev_state=-1; //0:Slave; 1:Master;
    
        //READ_CTRL, set URL of application system. Access master_ip in browser.
        PROCEDURE: READ_CTRL
        prev_ip=0.0.0.0;
        while true do
          read the value of ctrl set by batman-adv;
          read master_ip of Master SMD;
          if master_ip==me_ip and is_me!=-1 then
            prev_state=is_me;
            is_me=1;
          else if master_ip!=me_ip and is_me!=-1 then
            prev_state=is_me;
            is_me=0;
          end if
          if master_ip!=prev_ip then
            changed=1;
            prev_ip=master_ip;
            add (or update) "master_ip mpe.localhost" in /etc/hosts;
          end if
          sleep 1s;
        done
        END PROCEDURE READ_CTRL
    
        //****************************** MAIN Thread
        PROCEDURE: MAIN
        pthread_create(READ_CTRL);
        sleep 1s; //waiting for READ_CTRL to read the value of ctrl and master_ip of Master SMD
        start=1; //set initial state
        while true do
          if start==1 and ctrl==1 then
            start=0;
            is_me=1;
            pthread_create(Master);
            pthread_join(Master);
          else if start==1 and ctrl==0 then
            start=0;
            is_me=0;
            pthread_create(Slave);
            pthread_join(Slave);
          else if start==0 and changed==1 and ctrl==1 then
            pthread_create(Master);
            pthread_join(Master);
          else if start==0 and changed==1 and ctrl==0 then
            sleep(2);    //waiting master initialize
            pthread_create(Master);
            pthread_join(Master);
          else //start==0 and changed==0
            continue;
          end if
        done
        END PROCEDURE MAIN
    
        //****************************** Master Thread
        PROCEDURE: Master
        socket();
        bind();
        listen();
        while true do
          accept(); //waiting for connect from Slave
          pthread_create(M_THREAD);
        done
        END PROCEDURE Master
    
        //****************************** M_THREAD Thread
        PROCEDURE: M_THREAD
        while true do //communication between Master & Slave
          if database updating then
            send synchronous data to Slave;
          end if
        done
        END PROCEDURE M_THREAD
    
        //****************************** Slave Thread
        PROCEDURE: Slave
        socket();
        connect();
        while true do
          if receive synchronous data from Master then
            update database;
          end if
        done
        END PROCEDURE Slave
    
    



  • 相关阅读:
    Windows下利用CMake和VS2013编译OpenCV
    eclipse下Android工程名称的修改方法
    Android SDK Android NDK Android Studio 官方下载地址
    OpenCV4Android编译
    转载---- 使用opencv源码自己编制android so库的过程
    在Linux的Eclipse下搭建Android环境
    ANDROID STUDIO 2.2.3 DOWNLOAD FROM DL.GOOGLE.COM
    Python 垃圾回收机制
    基于linux参数优化tcp三次握手与四次挥手
    推荐
  • 原文地址:https://www.cnblogs.com/ztguang/p/12646710.html
Copyright © 2011-2022 走看看