From: Christophe ThiƩry Date: Fri, 20 Jan 2012 13:47:19 +0000 (+0100) Subject: Parmap: add a value XBT_PARMAP_DEFAULT that decides the synchro mode for you X-Git-Tag: exp_20120216~119^2~67 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ccc485f3688249e70503ad250cb065b5b6d7748f?hp=dc744bd76b753a66b1b92f11e22d592f4815d399 Parmap: add a value XBT_PARMAP_DEFAULT that decides the synchro mode for you --- diff --git a/include/xbt/parmap.h b/include/xbt/parmap.h index b2e66dc7a4..b53a6b0325 100644 --- a/include/xbt/parmap.h +++ b/include/xbt/parmap.h @@ -38,7 +38,8 @@ typedef struct s_xbt_parmap *xbt_parmap_t; 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_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, diff --git a/src/xbt/parmap.c b/src/xbt/parmap.c index f7fb43c615..9f2f35bd49 100644 --- a/src/xbt/parmap.c +++ b/src/xbt/parmap.c @@ -120,6 +120,13 @@ void xbt_parmap_destroy(xbt_parmap_t parmap) */ static void xbt_parmap_set_mode(xbt_parmap_t parmap, e_xbt_parmap_mode_t mode) { + if (mode == XBT_PARMAP_DEFAULT) { +#ifdef HAVE_FUTEX_H + mode = XBT_PARMAP_FUTEX; +#else + mode = XBT_PARMAP_POSIX; +#endif + } parmap->mode = mode; switch (mode) { @@ -149,6 +156,10 @@ static void xbt_parmap_set_mode(xbt_parmap_t parmap, e_xbt_parmap_mode_t mode) parmap->signal_f = xbt_parmap_busy_signal; parmap->wait_f = xbt_parmap_busy_wait; break; + + case XBT_PARMAP_DEFAULT: + THROW_IMPOSSIBLE; + break; } }