schedctx_t *LpelSchedCreate( int wid) { int i; schedctx_t *sc = (schedctx_t *) malloc( sizeof(schedctx_t)); for (i=0; i<SCHED_NUM_PRIO; i++) { LpelTaskqueueInit( &sc->queue[i]); } return sc; }
/** * Initialise worker globally * * * @param size size of the worker set, i.e., the total number of workers including master */ void LpelWorkersInit(int size) { int i; assert(0 <= size); num_workers = size - 1; /** create master */ master = (masterctx_t *) malloc(sizeof(masterctx_t)); master->mailbox = LpelMailboxCreate(); master->ready_tasks = LpelTaskqueueInit (); master->num_workers = num_workers; /* allocate worker context table */ workers = (workerctx_t **) malloc(num_workers * sizeof(workerctx_t*) ); /* allocate waiting table */ master->waitworkers = (int *) malloc(num_workers * sizeof(int)); /* allocate worker contexts */ for (i=0; i<num_workers; i++) { workers[i] = (workerctx_t *) malloc(sizeof(workerctx_t) ); master->waitworkers[i] = 0; workers[i]->wid = i; #ifdef USE_LOGGING if (MON_CB(worker_create)) { workers[i]->mon = MON_CB(worker_create)(workers[i]->wid); } else { workers[i]->mon = NULL; } #else workers[i]->mon = NULL; #endif /* mailbox */ workers[i]->mailbox = LpelMailboxCreate(); workers[i]->free_sd = NULL; workers[i]->free_stream = NULL; } /* local variables used in worker operations */ initLocalVar(num_workers); }