Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Direct context switching: clean the semantics of parmap
[simgrid.git] / src / xbt / parmap_private.h
index c81e05f..8b6c1bb 100644 (file)
 #include "xbt/sysdep.h"
 #include "xbt/dynar.h"
 #include "xbt/log.h"
-
+#include "xbt/xbt_os_time.h"
 
 typedef enum{
   PARMAP_WORK = 0,
   PARMAP_DESTROY
 } e_xbt_parmap_flag_t;
-typedef struct s_xbt_barrier{
+
 #ifdef HAVE_FUTEX_H
-       int futex;
-#else
-       xbt_os_mutex_t mutex;
-       xbt_os_cond_t cond;
-#endif
-  unsigned int thread_count;
+typedef struct s_xbt_event{
+  int work;
+  int done;
+  unsigned int thread_counter;
   unsigned int threads_to_wait;
-} s_xbt_barrier_t, *xbt_barrier_t;
-
-/* Wait for at least num_threads threads to arrive to the barrier */
-void xbt_barrier_init(xbt_barrier_t barrier, unsigned int threads_to_wait);
-void xbt_barrier_wait(xbt_barrier_t barrier);
+}s_xbt_event_t, *xbt_event_t;
 
+void xbt_event_init(xbt_event_t event);
+void xbt_event_signal(xbt_event_t event);
+void xbt_event_wait(xbt_event_t event);
+void xbt_event_end(xbt_event_t event);
+#endif
 
 typedef struct s_xbt_parmap {
   e_xbt_parmap_flag_t status;
-  xbt_barrier_t workers_ready;
-  xbt_barrier_t workers_done;
+#ifdef HAVE_FUTEX_H
+  xbt_event_t sync_event;
+#endif
   unsigned int num_workers;
   unsigned int workers_max_id;
   void_f_pvoid_t fun;
   xbt_dynar_t data;
+  unsigned int index;
 } s_xbt_parmap_t;
 
-
 #endif