diff examples/treedependtask/testmanager.cbc @ 8:07fab8c367b2

made src directory and move all source files into it. support autocont and automake tools.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Fri, 08 Jan 2010 14:40:49 +0900
parents
children f06fb0370caf
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/treedependtask/testmanager.cbc	Fri Jan 08 14:40:49 2010 +0900
@@ -0,0 +1,76 @@
+#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);
+}