X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/af598f6d08ede408d5910516e69c8a6bf21386ea..719a77db362a51309e90a75253788223936b276c:/src/xbt/parmap.c diff --git a/src/xbt/parmap.c b/src/xbt/parmap.c index 78dafe8dbe..1b0ab3d793 100644 --- a/src/xbt/parmap.c +++ b/src/xbt/parmap.c @@ -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 @@ -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 } /**