Mercurial > hg > Members > innparusu > Gears
diff src/parallel_execution/worker.c @ 125:77e60b6cdace
Work dependency example
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 27 Sep 2016 17:22:00 +0900 |
parents | 4ff6f093b695 |
children |
line wrap: on
line diff
--- a/src/parallel_execution/worker.c Tue Sep 27 16:19:31 2016 +0900 +++ b/src/parallel_execution/worker.c Tue Sep 27 17:22:00 2016 +0900 @@ -3,21 +3,27 @@ #include "context.h" #include "origin_cs.h" -__code initWorker(struct Context* context) { - context->next = GetInputData1; - goto meta(context, GetQueue1); +__code meta_getTask(struct Context* context, struct Queue* queue, enum Code next) { + context->data[Queue] = (union Data *)queue; + goto (context->code[next])(context); } -__code initWorker_stub(struct Context* context) { - goto initWorker(context); +__code getTask(struct Context* context, struct Queue* activeQueue) { + context->next = GetInputData1; + activeQueue->emptyNext = GetTask; + goto meta_getTask(context, activeQueue, GetQueue1); +} + +__code getTask_stub(struct Context* context) { + goto getTask(context, &context->data[ActiveQueue]->queue); } __code getQueue1(struct Context* context, struct Queue* queue, struct Element* element) { if (queue->first == 0) - return; + goto meta(context, queue->emptyNext); element->data = queue->first->data; - if (__sync_bool_compare_and_swap(&queue->first, queue->first, queue->first->next)) { + if (__sync_bool_compare_and_swap(&queue->first, queue->first, queue->next)) { queue->count--; goto meta(context, context->next); } else {