X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1fd15d2c07a6c04bc8dd130ea48abd79ae714731..f57edc1d5b4f497883b451fc85d2d653d27a8247:/src/xbt/parmap_private.h diff --git a/src/xbt/parmap_private.h b/src/xbt/parmap_private.h index c81e05f29d..8b6c1bb677 100644 --- a/src/xbt/parmap_private.h +++ b/src/xbt/parmap_private.h @@ -12,37 +12,37 @@ #include "xbt/sysdep.h" #include "xbt/dynar.h" #include "xbt/log.h" - +#include "xbt/xbt_os_time.h" typedef enum{ PARMAP_WORK = 0, PARMAP_DESTROY } e_xbt_parmap_flag_t; -typedef struct s_xbt_barrier{ + #ifdef HAVE_FUTEX_H - int futex; -#else - xbt_os_mutex_t mutex; - xbt_os_cond_t cond; -#endif - unsigned int thread_count; +typedef struct s_xbt_event{ + int work; + int done; + unsigned int thread_counter; 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); +}s_xbt_event_t, *xbt_event_t; +void xbt_event_init(xbt_event_t event); +void xbt_event_signal(xbt_event_t event); +void xbt_event_wait(xbt_event_t event); +void xbt_event_end(xbt_event_t event); +#endif typedef struct s_xbt_parmap { e_xbt_parmap_flag_t status; - xbt_barrier_t workers_ready; - xbt_barrier_t workers_done; +#ifdef HAVE_FUTEX_H + xbt_event_t sync_event; +#endif unsigned int num_workers; unsigned int workers_max_id; void_f_pvoid_t fun; xbt_dynar_t data; + unsigned int index; } s_xbt_parmap_t; - #endif