view src/parallel_execution/dependency.c @ 111:556e203de999

Add dependency.c
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Mon, 02 May 2016 20:39:02 +0900
parents
children e3cba827d489
line wrap: on
line source

#include "context.h"
#include "origin_cs.h"

__code meta_waitFor(struct Context* context, struct Queue* queue, enum Code next) {
    context->data[Queue] = (Data *)queue;
    goto (context->code[next])(context);
}

__code waitFor1(struct Context* context, struct Task* master, struct Task* slave, struct Element* element) {
    element->task = slave;
    task->next = WaitFor2;
    // enqueue waitMe
    goto meta_waitFor(context, task->waitMe, PutQueue1);
}

__code waitFor1_stub(struct Context* context) {
    // next think
}

__code waitFor2(struct Context* context, struct Task* master, struct Task* slave, struct Element* element) {
    element->task = master;
    task->next = context->next;
    // enqueue waitI
    goto meta_waitFor(context, task->waitI, PutQueue1);
}

__code waitFor2_stub(struct Context* context) {
    // next think
}

__code spawnTask(struct Context* context, struct Task* task, struct Queue* activeQueue, struct Queue* waitQueue) {
    if (task->wait_i->count == task->wait_task_count) {
        element->task = task;
        // enqueue activeQueue
        goto meta(context, PutQueue1);
    }
    else {
        element->task = task;
        // enqueue waitQueue
        goto meta(context, PutQueue1);
    }
}

__code spawnTask_stub(struct Context* context) {
    // next think
}

__code taskA(struct Context*) {
    printf("TaskA\n");
    goto meta(context, context->next);
}

__code taskB(struct Context*) {
    printf("TaskB\n");
    goto meta(context, context->next);
}

__code taskC(struct Context*) {
    printf("TaskC\n");
    goto meta(context, context->next);
}