X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a889c5815b75beb11f858bab68b2314c8dc724c2..d8308c2cacc831e01b98fa8e0d593f1480c25892:/src/xbt/parmap_private.h diff --git a/src/xbt/parmap_private.h b/src/xbt/parmap_private.h index e51a27ff1e..02da424924 100644 --- a/src/xbt/parmap_private.h +++ b/src/xbt/parmap_private.h @@ -7,32 +7,38 @@ #ifndef _XBT_THREADPOOL_PRIVATE_H #define _XBT_THREADPOOL_PRIVATE_H -#include "xbt/threadpool.h" +#include "xbt/parmap.h" #include "xbt/xbt_os_thread.h" #include "xbt/sysdep.h" #include "xbt/dynar.h" #include "xbt/log.h" + typedef enum{ - TPOOL_WAIT = 0, - TPOOL_DESTROY -} e_xbt_tpool_flag_t; - -typedef struct s_xbt_tpool { - xbt_os_mutex_t mutex; /* pool's mutex */ - xbt_os_cond_t job_posted; /* job is posted */ - xbt_os_cond_t job_taken; /* job is taken */ - xbt_os_cond_t idle_worker; /* job is done */ - xbt_dynar_t jobs_queue; - e_xbt_tpool_flag_t flags; - unsigned int num_workers; - unsigned int num_idle_workers; - unsigned int max_jobs; -} s_xbt_tpool_t; + 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_tpool_job { + +typedef struct s_xbt_parmap { + e_xbt_parmap_flag_t status; + xbt_barrier_t workers_ready; + xbt_barrier_t workers_done; + unsigned int num_workers; + unsigned int workers_max_id; void_f_pvoid_t fun; - void *fun_arg; -} s_xbt_tpool_job_t, *xbt_tpool_job_t; + xbt_dynar_t data; +} s_xbt_parmap_t; + #endif