X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e9ab9f33e311ec4a6d13f1cabae75202fbfdaa1d..1c86ddc00bb20b4f3779a815f732a1c1cb14139a:/src/xbt/parmap.c diff --git a/src/xbt/parmap.c b/src/xbt/parmap.c index 19dcb58027..5801828377 100644 --- a/src/xbt/parmap.c +++ b/src/xbt/parmap.c @@ -14,12 +14,47 @@ #else #include "xbt/xbt_os_thread.h" #endif -#include -#include "parmap_private.h" +#include "xbt/parmap.h" +#include "xbt/log.h" +#include "xbt/function_types.h" +#include "xbt/dynar.h" +#include "xbt/xbt_os_thread.h" +#include "xbt/sysdep.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_parmap, xbt, "parmap: parallel map"); XBT_LOG_NEW_SUBCATEGORY(xbt_parmap_unit, xbt_parmap, "parmap unit testing"); +typedef enum{ + 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_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; + xbt_dynar_t data; + unsigned int index; +} s_xbt_parmap_t; + static void *_xbt_parmap_worker_main(void *parmap); #ifdef HAVE_FUTEX_H static void futex_wait(int *uaddr, int val);