X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/866550c0a0ea154753da12952a154cb71dfb8264..406f54970c00ca178fa918763d943027bd09e3ba:/include/xbt/parmap.h diff --git a/include/xbt/parmap.h b/include/xbt/parmap.h index 172ef6be61..3b9f9ed8fa 100644 --- a/include/xbt/parmap.h +++ b/include/xbt/parmap.h @@ -16,14 +16,16 @@ SG_BEGIN_DECL() /** \addtogroup XBT_parmap + * \ingroup XBT_misc * \brief Parallel map. * - * A function is applied to the n first elements of a dynar in parallel, - * where n is the number of threads. The threads are persistent until the - * destruction of the parmap object. + * A function is applied to all elements of a dynar in parallel with n worker + * threads. + * The worker threads are persistent until the destruction of the parmap. * - * If there are more than n elements in the dynar, the worker threads should - * fetch themselves remaining work with xbt_parmap_next() and execute it. + * If there are more than n elements in the dynar, the worker threads are + * allowed to fetch themselves remaining work with xbt_parmap_next() and + * execute it. * * \{ */ @@ -31,7 +33,18 @@ SG_BEGIN_DECL() /** \brief Parallel map data type (opaque type) */ typedef struct s_xbt_parmap *xbt_parmap_t; -XBT_PUBLIC(xbt_parmap_t) xbt_parmap_new(unsigned int num_workers); +/** + * \brief Synchronization mode of the worker threads of a parmap. + */ +typedef enum { + XBT_PARMAP_POSIX, /**< use POSIX synchronization primitives */ + XBT_PARMAP_FUTEX, /**< use Linux futex system call */ + XBT_PARMAP_BUSY_WAIT, /**< busy waits (no system calls, maximum CPU usage) */ + XBT_PARMAP_DEFAULT /**< futex if available, posix otherwise */ +} e_xbt_parmap_mode_t; + +XBT_PUBLIC(xbt_parmap_t) xbt_parmap_new(unsigned int num_workers, + e_xbt_parmap_mode_t mode); XBT_PUBLIC(void) xbt_parmap_destroy(xbt_parmap_t parmap); XBT_PUBLIC(void) xbt_parmap_apply(xbt_parmap_t parmap,