+/**
+ * \brief Sets the synchronization mode of a parmap.
+ * \param parmap a parallel map object
+ * \param mode the synchronization 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) {
+
+ case XBT_PARMAP_POSIX:
+ parmap->start_f = xbt_parmap_posix_start;
+ parmap->end_f = xbt_parmap_posix_end;
+ parmap->signal_f = xbt_parmap_posix_signal;
+ parmap->wait_f = xbt_parmap_posix_wait;
+ break;
+
+
+ case XBT_PARMAP_FUTEX:
+#ifdef HAVE_FUTEX_H
+ parmap->start_f = xbt_parmap_futex_start;
+ parmap->end_f = xbt_parmap_futex_end;
+ parmap->signal_f = xbt_parmap_futex_signal;
+ parmap->wait_f = xbt_parmap_futex_wait;
+ 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;
+ parmap->end_f = xbt_parmap_busy_end;
+ parmap->signal_f = xbt_parmap_busy_signal;
+ parmap->wait_f = xbt_parmap_busy_wait;
+ break;
+
+ case XBT_PARMAP_DEFAULT:
+ THROW_IMPOSSIBLE;
+ break;
+ }
+}
+