- TPOOL_WAIT = 0,
- TPOOL_DESTROY
-} e_xbt_tpool_flag_t;
-
-typedef struct s_xbt_tpool {
- xbt_os_mutex_t mutex; /* pool's mutex */
- xbt_os_cond_t job_posted; /* job is posted */
- xbt_os_cond_t job_taken; /* job is taken */
- xbt_os_cond_t idle_worker; /* job is done */
- xbt_dynar_t jobs_queue;
- e_xbt_tpool_flag_t flags;
- unsigned int num_workers;
- unsigned int num_idle_workers;
- unsigned int max_jobs;
-} s_xbt_tpool_t;
+ 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;
+ 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);