*/
void xbt_parmap_apply(xbt_parmap_t parmap, void_f_pvoid_t fun, xbt_dynar_t data)
{
- /* Assign resources to worker threads*/
+ /* Assign resources to worker threads */
parmap->fun = fun;
parmap->data = data;
parmap->index = 0;
return NULL;
}
-/**
- * \brief Returns the worker id of the current thread.
- * \param parmap a parmap
- * \return the worker id
- */
-unsigned long xbt_parmap_get_worker_id(xbt_parmap_t parmap)
-{
- return (unsigned long) xbt_os_thread_get_extra_data();
-}
-
/**
* \brief Main function of a worker thread.
* \param arg the parmap
*/
static void *xbt_parmap_worker_main(void *arg)
{
- unsigned int worker_id;
xbt_parmap_t parmap = (xbt_parmap_t) 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);
+ XBT_DEBUG("New worker thread created");
- XBT_DEBUG("New worker thread created (%u)", worker_id);
-
/* Worker's main loop */
while (1) {
xbt_parmap_wait(parmap);
if (parmap->status == PARMAP_WORK) {
- XBT_DEBUG("Worker %u got a job", worker_id);
+ XBT_DEBUG("Worker got a job");
void* work = xbt_parmap_next(parmap);
if (work != NULL) {
parmap->fun(work);
}
- XBT_DEBUG("Worker %u has finished", worker_id);
+ XBT_DEBUG("Worker has finished");
/* We are destroying the parmap */
} else {
xbt_parmap_end(parmap);
- XBT_DEBUG("Shutting down worker %u", worker_id);
+ XBT_DEBUG("Shutting down worker");
return NULL;
}
}
/* Create the parallel map */
parmap = xbt_parmap_new(10);
- for(j = 0; j < 100; j++) {
+ for (j = 0; j < 100; j++) {
xbt_dynar_push_as(data, void *, (void *)j);
}