X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/50486ccd16de39a3659592fab44adfaf3104a086..ccc485f3688249e70503ad250cb065b5b6d7748f:/src/xbt/parmap.c diff --git a/src/xbt/parmap.c b/src/xbt/parmap.c index 44f010ea89..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) { @@ -131,12 +138,17 @@ static void xbt_parmap_set_mode(xbt_parmap_t parmap, e_xbt_parmap_mode_t mode) 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; @@ -144,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; } } @@ -441,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); }