From ccc485f3688249e70503ad250cb065b5b6d7748f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christophe=20Thi=C3=A9ry?= Date: Fri, 20 Jan 2012 14:47:19 +0100 Subject: [PATCH] Parmap: add a value XBT_PARMAP_DEFAULT that decides the synchro mode for you --- include/xbt/parmap.h | 3 ++- src/xbt/parmap.c | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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; } } -- 2.20.1