X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c8a23ca82002d2dcec32e5dc5e3bc249d2f3b920..d8308c2cacc831e01b98fa8e0d593f1480c25892:/src/xbt/parmap_private.h?ds=sidebyside diff --git a/src/xbt/parmap_private.h b/src/xbt/parmap_private.h index 283b025774..02da424924 100644 --- a/src/xbt/parmap_private.h +++ b/src/xbt/parmap_private.h @@ -13,22 +13,32 @@ #include "xbt/dynar.h" #include "xbt/log.h" + typedef enum{ - PARMAP_WAIT = 0, - PARMAP_WORK, - PARMAP_DESTROY, + PARMAP_WORK = 0, + PARMAP_DESTROY } e_xbt_parmap_flag_t; +typedef struct s_xbt_barrier{ + int futex; + unsigned int thread_count; + unsigned int threads_to_wait; +} s_xbt_barrier_t, *xbt_barrier_t; + +/* Wait for at least num_threads threads to arrive to the barrier */ +void xbt_barrier_init(xbt_barrier_t barrier, unsigned int threads_to_wait); +void xbt_barrier_wait(xbt_barrier_t barrier); + + typedef struct s_xbt_parmap { - xbt_os_mutex_t mutex; /* pool's mutex */ - xbt_os_cond_t job_posted; /* job is posted */ - xbt_os_cond_t all_done; /* job is done */ - e_xbt_parmap_flag_t *flags; /* Per thread flag + lastone for the parmap */ + e_xbt_parmap_flag_t status; + xbt_barrier_t workers_ready; + xbt_barrier_t workers_done; unsigned int num_workers; - unsigned int num_idle_workers; unsigned int workers_max_id; void_f_pvoid_t fun; xbt_dynar_t data; } s_xbt_parmap_t; + #endif