Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add an unused (for the moment) module file
[simgrid.git] / src / xbt / parmap.c
index 6852623..8492f38 100644 (file)
@@ -5,7 +5,10 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 #include "gras_config.h"
 #include <unistd.h>
+#ifndef _XBT_WIN32
 #include <sys/syscall.h>
+#endif
+
 #ifdef HAVE_FUTEX_H
        #include <linux/futex.h>
 #else
@@ -31,10 +34,6 @@ xbt_parmap_t xbt_parmap_new(unsigned int num_workers)
 
   /* Initialize the thread pool data structure */
   xbt_parmap_t parmap = xbt_new0(s_xbt_parmap_t, 1);
-  #ifndef HAVE_FUTEX_H
-         parmap->workers_ready->mutex = xbt_os_mutex_init();
-         parmap->workers_ready->cond = xbt_os_cond_init();
-  #endif
   parmap->num_workers = num_workers;
   parmap->status = PARMAP_WORK;
 
@@ -42,7 +41,10 @@ xbt_parmap_t xbt_parmap_new(unsigned int num_workers)
   xbt_barrier_init(parmap->workers_ready, num_workers + 1);
   parmap->workers_done = xbt_new0(s_xbt_barrier_t, 1);
   xbt_barrier_init(parmap->workers_done, num_workers + 1);
-
+#ifndef HAVE_FUTEX_H
+  parmap->workers_ready->mutex = xbt_os_mutex_init();
+  parmap->workers_ready->cond = xbt_os_cond_init();
+#endif
   /* Create the pool of worker threads */
   for(i=0; i < num_workers; i++){
     worker = xbt_os_thread_create(NULL, _xbt_parmap_worker_main, parmap, NULL);
@@ -61,7 +63,10 @@ void xbt_parmap_destroy(xbt_parmap_t parmap)
   xbt_barrier_wait(parmap->workers_ready);
   DEBUG0("Kill job sent");
   xbt_barrier_wait(parmap->workers_done);
-
+#ifndef HAVE_FUTEX_H
+  xbt_os_mutex_destroy(parmap->workers_ready->mutex);
+  xbt_os_cond_destroy(parmap->workers_ready->cond);
+#endif
   xbt_free(parmap->workers_ready);
   xbt_free(parmap->workers_done);
   xbt_free(parmap);
@@ -90,6 +95,7 @@ static void *_xbt_parmap_worker_main(void *arg)
 
   /* Fetch a worker id */
   worker_id = __sync_fetch_and_add(&parmap->workers_max_id, 1);
+  xbt_os_thread_set_extra_data((void *)(unsigned long)worker_id);
 
   DEBUG1("New worker thread created (%u)", worker_id);
   
@@ -170,9 +176,6 @@ void xbt_barrier_init(xbt_barrier_t barrier, unsigned int threads_to_wait)
 #else
        void xbt_barrier_wait(xbt_barrier_t barrier)
        {
-         int myflag = 0;
-         unsigned int mycount = 0;
-
          xbt_os_mutex_acquire(barrier->mutex);
 
          barrier->thread_count++;