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



    点击(此处)折叠或打开

    1. 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).

    2. ctrl: Master or Slave, this value is set by batman-adv;
    3.   ctrl=0, SMD is Slave role;
    4.   ctrl=1, SMD is elected as a Master role;

    5. changed: Master or Slave, this value is set by batman-adv;
    6.   changed=0, Master SMD is not changed, so, do not need to create thread in MAIN again for data synchronization;
    7.   changed=1, Master SMD is changed, so, need to create thread in MAIN again for data synchronization;

    8. changed=0;
    9. is_me=-1;
    10. prev_state=-1; //0:Slave; 1:Master;

    11. //READ_CTRL, set URL of application system. Access master_ip in browser.
    12. PROCEDURE: READ_CTRL
    13. prev_ip=0.0.0.0;
    14. while true do
    15.   read the value of ctrl set by batman-adv;
    16.   read master_ip of Master SMD;
    17.   if master_ip==me_ip and is_me!=-1 then
    18.     prev_state=is_me;
    19.     is_me=1;
    20.   else if master_ip!=me_ip and is_me!=-1 then
    21.     prev_state=is_me;
    22.     is_me=0;
    23.   end if
    24.   if master_ip!=prev_ip then
    25.     changed=1;
    26.     prev_ip=master_ip;
    27.     add (or update) "master_ip mpe.localhost" in /etc/hosts;
    28.   end if
    29.   sleep 1s;
    30. done
    31. END PROCEDURE READ_CTRL

    32. //****************************** MAIN Thread
    33. PROCEDURE: MAIN
    34. pthread_create(READ_CTRL);
    35. sleep 1s; //waiting for READ_CTRL to read the value of ctrl and master_ip of Master SMD
    36. start=1; //set initial state
    37. while true do
    38.   if start==1 and ctrl==1 then
    39.     start=0;
    40.     is_me=1;
    41.     pthread_create(Master);
    42.     pthread_join(Master);
    43.   else if start==1 and ctrl==0 then
    44.     start=0;
    45.     is_me=0;
    46.     pthread_create(Slave);
    47.     pthread_join(Slave);
    48.   else if start==0 and changed==1 and ctrl==1 then
    49.     pthread_create(Master);
    50.     pthread_join(Master);
    51.   else if start==0 and changed==1 and ctrl==0 then
    52.     sleep(2);    //waiting master initialize
    53.     pthread_create(Master);
    54.     pthread_join(Master);
    55.   else //start==0 and changed==0
    56.     continue;
    57.   end if
    58. done
    59. END PROCEDURE MAIN

    60. //****************************** Master Thread
    61. PROCEDURE: Master
    62. socket();
    63. bind();
    64. listen();
    65. while true do
    66.   accept(); //waiting for connect from Slave
    67.   pthread_create(M_THREAD);
    68. done
    69. END PROCEDURE Master

    70. //****************************** M_THREAD Thread
    71. PROCEDURE: M_THREAD
    72. while true do //communication between Master & Slave
    73.   if database updating then
    74.     send synchronous data to Slave;
    75.   end if
    76. done
    77. END PROCEDURE M_THREAD

    78. //****************************** Slave Thread
    79. PROCEDURE: Slave
    80. socket();
    81. connect();
    82. while true do
    83.   if receive synchronous data from Master then
    84.     update database;
    85.   end if
    86. done
    87. END PROCEDURE Slave





  • 相关阅读:
    PostgreSQL数据库((数据库类型介绍)
    postgreSQL(SQL语音操作数据库)
    postgreSQL数据库连接注意事项
    数据库
    Excel函数文本变E+显示怎么办
    无糖可乐不好喝
    通过 命令查看 linux桌面使用的是wayland 还是 X11
    Intel CPU的后缀含义
    互联网缩略语
    linux 下为windows交叉编译 ffmpeg库
  • 原文地址:https://www.cnblogs.com/ztguang/p/12649414.html
Copyright © 2011-2022 走看看