X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a889c5815b75beb11f858bab68b2314c8dc724c2..6e5cfd7ff86900354c20502af95ee5f751492753:/src/xbt/parmap_private.h diff --git a/src/xbt/parmap_private.h b/src/xbt/parmap_private.h index e51a27ff1e..8b6c1bb677 100644 --- a/src/xbt/parmap_private.h +++ b/src/xbt/parmap_private.h @@ -7,32 +7,42 @@ #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" +#include "xbt/xbt_os_time.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; + +#ifdef HAVE_FUTEX_H +typedef struct s_xbt_event{ + int work; + int done; + unsigned int thread_counter; + unsigned int threads_to_wait; +}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_tpool_job { +typedef struct s_xbt_parmap { + e_xbt_parmap_flag_t status; +#ifdef HAVE_FUTEX_H + xbt_event_t sync_event; +#endif + 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; + unsigned int index; +} s_xbt_parmap_t; #endif