Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' into mc
[simgrid.git] / src / xbt / parmap.c
index 78dafe8..1b0ab3d 100644 (file)
@@ -1,8 +1,9 @@
-/* Copyright (c) 2004-2005, 2007, 2009-2013. The SimGrid Team.
+/* Copyright (c) 2004-2005, 2007, 2009-2014. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
+
 #include "internal_config.h"
 #include <unistd.h>
 
@@ -167,7 +168,6 @@ xbt_parmap_t xbt_parmap_mc_new(unsigned int num_workers, e_xbt_parmap_mode_t mod
     data->worker_id = i;
     parmap->workers[i] = xbt_os_thread_create(NULL, xbt_parmap_mc_worker_main,
                                               data, NULL);
-    xbt_os_thread_detach(worker);
   }
   return parmap;
 }
@@ -272,14 +272,14 @@ static void xbt_parmap_set_mode(xbt_parmap_t parmap, e_xbt_parmap_mode_t mode)
  */
 void xbt_parmap_apply(xbt_parmap_t parmap, void_f_pvoid_t fun, xbt_dynar_t data)
 {
-  /* Assign resources to worker threads */
+  /* Assign resources to worker threads (we are maestro here)*/
   parmap->fun = fun;
   parmap->data = data;
   parmap->index = 0;
-  parmap->master_signal_f(parmap);
-  xbt_parmap_work(parmap);
-  parmap->master_wait_f(parmap);
-  XBT_DEBUG("Job done");
+  parmap->master_signal_f(parmap); // maestro runs futex_wait to wake all the minions (the working threads)
+  xbt_parmap_work(parmap);         // maestro works with its minions
+  parmap->master_wait_f(parmap);   // When there is no more work to do, then maestro waits for the last minion to stop
+  XBT_DEBUG("Job done");           //   ... and proceeds
 }
 
 /**