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,
*/
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->signal_f = xbt_parmap_busy_signal;
parmap->wait_f = xbt_parmap_busy_wait;
break;
+
+ case XBT_PARMAP_DEFAULT:
+ THROW_IMPOSSIBLE;
+ break;
}
}