X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5f6cef8bdac64b84b4886b2f2c6a89b65763dc09..5cf8b774598c7ce08ee2c05b1c461b10d0707b75:/src/xbt/xbt_synchro.c diff --git a/src/xbt/xbt_synchro.c b/src/xbt/xbt_synchro.c index 5b78e0a0cf..a2349d8449 100644 --- a/src/xbt/xbt_synchro.c +++ b/src/xbt/xbt_synchro.c @@ -10,26 +10,28 @@ #include "xbt/sysdep.h" #include "xbt/dynar.h" #include "xbt/synchro.h" +#include "xbt/xbt_os_thread.h" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(xbt_sync); typedef struct { xbt_dynar_t data; int rank; void_f_int_pvoid_t function; - xbt_thread_t worker; + xbt_os_thread_t worker; } s_worker_data_t, *worker_data_t; static void worker_wait_n_free(void *w) { worker_data_t worker = *(worker_data_t *) w; - xbt_thread_join(worker->worker); + xbt_os_thread_join(worker->worker, NULL); xbt_free(worker); } -static void worker_wrapper(void *w) +static void *worker_wrapper(void *w) { worker_data_t me = (worker_data_t) w; - (*me->function) (me->rank, xbt_dynar_get_ptr(me->data, me->rank)); + me->function(me->rank, xbt_dynar_get_ptr(me->data, me->rank)); + return NULL; } void xbt_dynar_dopar(xbt_dynar_t datas, void_f_int_pvoid_t function) @@ -38,15 +40,15 @@ void xbt_dynar_dopar(xbt_dynar_t datas, void_f_int_pvoid_t function) xbt_dynar_new(sizeof(worker_data_t), worker_wait_n_free); unsigned int cursor; void *data; - if (xbt_dynar_length(datas) == 0) + if (xbt_dynar_is_empty(datas)) return; /* nothing to do */ if (xbt_dynar_length(datas) == 1) { /* don't start any new thread, do it directly */ - (*function) (0, xbt_dynar_get_ptr(datas, 0)); + function(0, xbt_dynar_get_ptr(datas, 0)); return; } /* Start all workers */ - XBT_DEBUG("Dopar for %ld elements", xbt_dynar_length(datas)); + XBT_DEBUG("Dopar for %lu elements", xbt_dynar_length(datas)); xbt_dynar_foreach(datas, cursor, data) { worker_data_t w = xbt_new0(s_worker_data_t, 1); w->data = datas; @@ -54,8 +56,7 @@ void xbt_dynar_dopar(xbt_dynar_t datas, void_f_int_pvoid_t function) w->rank = cursor; xbt_dynar_push(workers, &w); w->worker = - xbt_thread_create("dopar worker", worker_wrapper, w, - 1 /*joinable */ ); + xbt_os_thread_create("dopar worker", worker_wrapper, w, NULL); } /* wait them all */ xbt_dynar_free(&workers); @@ -66,8 +67,7 @@ void xbt_dynar_dopar(xbt_dynar_t datas, void_f_int_pvoid_t function) #include "xbt/synchro.h" XBT_TEST_SUITE("synchro", "Advanced synchronization mecanisms"); -XBT_LOG_EXTERNAL_CATEGORY(xbt_dyn); -XBT_LOG_DEFAULT_CATEGORY(xbt_dyn); +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(xbt_dyn); static void add100(int rank, void *data) {