Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Parmap: add a value XBT_PARMAP_DEFAULT that decides the synchro mode for you
authorChristophe Thiéry <christopho128@gmail.com>
Fri, 20 Jan 2012 13:47:19 +0000 (14:47 +0100)
committerChristophe Thiéry <christopho128@gmail.com>
Fri, 20 Jan 2012 13:48:55 +0000 (14:48 +0100)
include/xbt/parmap.h
src/xbt/parmap.c

index b2e66dc..b53a6b0 100644 (file)
@@ -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 */
 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,
 } e_xbt_parmap_mode_t;
 
 XBT_PUBLIC(xbt_parmap_t) xbt_parmap_new(unsigned int num_workers,
index f7fb43c..9f2f35b 100644 (file)
@@ -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)
 {
  */
 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) {
   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;
       parmap->signal_f = xbt_parmap_busy_signal;
       parmap->wait_f = xbt_parmap_busy_wait;
       break;
+
+    case XBT_PARMAP_DEFAULT:
+      THROW_IMPOSSIBLE;
+      break;
   }
 }
 
   }
 }