/* 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;
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);
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);
#else
void xbt_barrier_wait(xbt_barrier_t barrier)
{
- int myflag = 0;
- unsigned int mycount = 0;
-
xbt_os_mutex_acquire(barrier->mutex);
- //pthread_mutex_lock(&barrier->mutex);
barrier->thread_count++;
if(barrier->thread_count < barrier->threads_to_wait){
xbt_os_cond_wait(barrier->cond,barrier->mutex);
- //pthread_cond_wait(&barrier->mutex,&barrier->cond);
}else{
barrier->thread_count = 0;
xbt_os_cond_broadcast(barrier->cond);
- //pthread_cond_broadcast(&barrier->mutex, &barrier->cond);
}
xbt_os_mutex_release(barrier->mutex);
- //pthread_mutex_unlock(&barrier->mutex);
}
#endif