Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Parmap: add a value XBT_PARMAP_DEFAULT that decides the synchro mode for you
[simgrid.git] / src / xbt / parmap.c
index 0b922d0..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)
 {
+  if (mode == XBT_PARMAP_DEFAULT) {
+#ifdef HAVE_FUTEX_H
+    mode = XBT_PARMAP_FUTEX;
+#else
+    mode = XBT_PARMAP_POSIX;
+#endif
+  }
   parmap->mode = mode;
 
   switch (mode) {
@@ -138,9 +145,10 @@ static void xbt_parmap_set_mode(xbt_parmap_t parmap, e_xbt_parmap_mode_t mode)
       parmap->end_f = xbt_parmap_futex_end;
       parmap->signal_f = xbt_parmap_futex_signal;
       parmap->wait_f = xbt_parmap_futex_wait;
-#endif
-      xbt_die("Impossible to use futex on Mac");
       break;
+#else
+      xbt_die("Futex is not available on this OS (maybe you are on a Mac).");
+#endif
 
     case XBT_PARMAP_BUSY_WAIT:
       parmap->start_f = xbt_parmap_busy_start;
@@ -148,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;
   }
 }
 
@@ -445,8 +457,11 @@ XBT_TEST_UNIT("basic", test_parmap_basic, "Basic usage")
   xbt_dynar_t data = xbt_dynar_new(sizeof(void *), NULL);
 
   /* Create the parallel map */
+#ifdef HAVE_FUTEX_H
   parmap = xbt_parmap_new(10, XBT_PARMAP_FUTEX);
-
+#else
+  parmap = xbt_parmap_new(10, XBT_PARMAP_BUSY_WAIT);
+#endif
   for (j = 0; j < 100; j++) {
     xbt_dynar_push_as(data, void *, (void *)j);
   }