#include "xbt/dynar.h"
#include "xbt/log.h"
+
typedef enum{
- PARMAP_WAIT = 0,
- PARMAP_WORK,
- PARMAP_DESTROY,
+ PARMAP_WORK = 0,
+ PARMAP_DESTROY
} e_xbt_parmap_flag_t;
+typedef struct s_xbt_barrier{
+ int futex;
+ 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);
+
+
typedef struct s_xbt_parmap {
- xbt_os_mutex_t mutex; /* pool's mutex */
- xbt_os_cond_t job_posted; /* job is posted */
- xbt_os_cond_t all_done; /* job is done */
- e_xbt_parmap_flag_t *flags; /* Per thread flag + lastone for the parmap */
+ e_xbt_parmap_flag_t status;
+ xbt_barrier_t workers_ready;
+ xbt_barrier_t workers_done;
unsigned int num_workers;
- unsigned int num_idle_workers;
unsigned int workers_max_id;
void_f_pvoid_t fun;
xbt_dynar_t data;
} s_xbt_parmap_t;
+
#endif