/** * Broadcast a termination message */ void LpelWorkerTerminate(void) { workermsg_t msg; /* compose a task term message */ msg.type = WORKER_MSG_TERMINATE; LpelWorkerBroadcast(&msg); }
void *MasterThread(void *arg) { masterctx_t *master = (masterctx_t *)arg; num_workers = master->num_workers; //#ifdef HAVE___THREAD // workerctx_cur = ms; //#else /* HAVE___THREAD */ // /* set pointer to worker context as TSD */ // pthread_setspecific(workerctx_key, ms); //#endif /* HAVE___THREAD */ //FIXME #ifdef USE_MCTX_PCL assert(0 == co_thread_init()); master->mctx = co_current(); #endif /* assign to cores */ master->terminate = 0; LpelThreadAssign(LPEL_MAP_MASTER); // master loop, no monitor for master MasterLoop(master); // master terminated, now terminate worker workermsg_t msg; msg.type = WORKER_MSG_TERMINATE; LpelWorkerBroadcast(&msg); #ifdef USE_MCTX_PCL co_thread_cleanup(); #endif return NULL; }