Example #1
0
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;
}
Example #2
0
/**
 * 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);
}