Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use std::atomic::fetch_add instead of ++ shortcut (clearer to the reader).
[simgrid.git] / src / include / xbt / parmap.hpp
index 24affcc..00f4b8c 100644 (file)
@@ -62,25 +62,25 @@ private:
   class Synchro {
   public:
     explicit Synchro(Parmap<T>& parmap) : parmap(parmap) {}
-    virtual ~Synchro() {}
+    virtual ~Synchro() = default;
     /**
      * \brief Wakes all workers and waits for them to finish the tasks.
      *
      * This function is called by the controller thread.
      */
-    virtual void master_signal()       = 0;
+    virtual void master_signal() = 0;
     /**
      * \brief Starts the parmap: waits for all workers to be ready and returns.
      *
      * This function is called by the controller thread.
      */
-    virtual void master_wait()         = 0;
+    virtual void master_wait() = 0;
     /**
      * \brief Ends the parmap: wakes the controller thread when all workers terminate.
      *
      * This function is called by all worker threads when they end (not including the controller).
      */
-    virtual void worker_signal()       = 0;
+    virtual void worker_signal() = 0;
     /**
      * \brief Waits for some work to process.
      *
@@ -90,7 +90,6 @@ private:
      */
     virtual void worker_wait(unsigned) = 0;
 
-  protected:
     Parmap<T>& parmap;
   };
 
@@ -225,7 +224,7 @@ template <typename T> void Parmap<T>::apply(void (*fun)(T), const std::vector<T>
  */
 template <typename T> boost::optional<T> Parmap<T>::next()
 {
-  unsigned index = this->index++;
+  unsigned index = this->index.fetch_add(1, std::memory_order_relaxed);
   if (index < this->data->size())
     return (*this->data)[index];
   else
@@ -237,11 +236,11 @@ template <typename T> boost::optional<T> Parmap<T>::next()
  */
 template <typename T> void Parmap<T>::work()
 {
-  unsigned index = this->index++;
   unsigned length = this->data->size();
+  unsigned index  = this->index.fetch_add(1, std::memory_order_relaxed);
   while (index < length) {
     this->fun((*this->data)[index]);
-    index = this->index++;
+    index = this->index.fetch_add(1, std::memory_order_relaxed);
   }
 }