view examples/treedependtask/testmanager.cbc @ 10:5d400e07b19d

add automake tools.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Fri, 08 Jan 2010 14:48:59 +0900
parents 07fab8c367b2
children f06fb0370caf
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>

#include "CbCTaskManager.h"
#include "taskinit.h"

#define __DEBUG(f, args...) \
	fprintf(stderr, "in %s: "f, __FUNCTION__, ## args)




/* it may be moved to TaskManager side.  */
__code nojob(void *manager, void *rbuff, void *wbuff)
{
	goto scheduler(manager, ENDTASK, NULL, NULL);
}


extern __code taskA_0(UserManager *, void *, void *);
extern __code taskA_1(UserManager *, void *, void *);
extern __code taskA_2(UserManager *, void *, void *);


#define NUM 16

/*
 *  TASKs.
 */
__code starttask(UserManager *manager, void *rbuff, void *wbuff)
{
	UserTask *tasks[NUM];
	__DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff);
	int i;
	for (i=0; i<NUM; i++) {
		tasks[i] = createTask(TASK_A, NULL);
		taskSetData(tasks[i], (void*)i, i, NULL,0);
	}
	taskSetWait(tasks[0], tasks[1]);
	for (i=1; 2*i<NUM; i++) {
		taskSetWait(tasks[i], tasks[2*i]);
		if (2*i+1<NUM)
			taskSetWait(tasks[i], tasks[2*i+1]);
	}
	for (i=0; i<NUM; i++) {
		taskSpawn(manager, tasks[i]);
	}
	goto scheduler(manager, ENDTASK, NULL, NULL);
}

__code taskA(UserManager *manager, void *rbuff, void *wbuff)
{
	__DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff);
	goto scheduler(manager, taskA_0, NULL, NULL);
}
__code taskA_0(UserManager *manager, void *rbuff, void *wbuff)
{
	__DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff);
	goto scheduler(manager, taskA_1, NULL, NULL);
}
__code taskA_1(UserManager *manager, void *rbuff, void *wbuff)
{
	__DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff);
	goto scheduler(manager, taskA_2, NULL, NULL);
}
__code taskA_2(UserManager *manager, void *rbuff, void *wbuff)
{
	__DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff);
	goto scheduler(manager, ENDTASK, NULL, NULL);
}

__code taskB(UserManager *manager, void *rbuff, void *wbuff)
{
	__DEBUG("s=%p, rb=%p, wb=%p\n", manager, rbuff, wbuff);
	goto scheduler(manager, taskA_0, NULL, NULL);
}