]> AND Private Git Repository - loba.git/blobdiff - process.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Update TODO list.
[loba.git] / process.h
index ceca948a39433738d050b20f0864238d5203abf3..cc10b0494ba0710994be865891af6b153acba24b 100644 (file)
--- a/process.h
+++ b/process.h
@@ -21,6 +21,7 @@
 #include "msg_thread.h"
 #include "neighbor.h"
 #include "options.h"
+#include "synchro.h"
 
 class process {
 public:
@@ -45,8 +46,7 @@ protected:
 
     // Get and set current load, which may be real load, or expected
     // load if opt::bookkeeping is true.
-    double get_load() const;
-    void set_load(double load);
+    double get_load() const                { return expected_load; }
 
     // The load balancing algorithm comes here...
     virtual void load_balance();
@@ -97,6 +97,9 @@ private:
     double real_load;           // current load
     double expected_load;       // expected load in bookkeeping mode
 
+    mutex_t mutex;              // synchronization between threads
+    condition_t cond;
+
     // Load-balancing loop
     msg_thread* lb_thread;
     void load_balance_loop();
@@ -104,8 +107,12 @@ private:
     // Simulate computation loop
     void compute_loop();
 
+    // Check if we need to stop
     bool still_running();
 
+    // Returns the sum of "to_send" for all neighbors.
+    double get_sum_of_to_send() const;
+
     // Send procedures
     void ctrl_send(neighbor& nb);
     void data_send(neighbor& nb);
@@ -120,24 +127,6 @@ private:
     void handle_message(message* msg, m_host_t from);
 };
 
-inline
-double process::get_load() const
-{
-    if (opt::bookkeeping)
-        return expected_load;
-    else
-        return real_load;
-}
-
-inline
-void process::set_load(double load)
-{
-    if (opt::bookkeeping)
-        expected_load = load;
-    else
-        real_load = load;
-}
-
 template <typename Compare>
 void process::pneigh_sort_by_load(const Compare& comp)
 {