Mercurial > hg > Members > innparusu > Gears
diff src/parallel_execution/main.c @ 92:851da1107223
implement twice
author | Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 26 Jan 2016 08:50:30 +0900 |
parents | 1e074c3878c7 |
children | 3e28ee215c0e |
line wrap: on
line diff
--- a/src/parallel_execution/main.c Tue Jan 26 07:46:26 2016 +0900 +++ b/src/parallel_execution/main.c Tue Jan 26 08:50:30 2016 +0900 @@ -30,14 +30,32 @@ print_queue(context->data[ActiveQueue]->queue.first); puts("tree"); print_tree(context->data[Tree]->tree.root); + puts("result"); - goto meta(context, Exit); + goto meta(context, CreateWorker); } __code code1_stub(struct Context* context) { goto code1(context); } +__code code2(struct Context* context, struct Array* array, struct LoopCounter* loopCounter) { + int i = loopCounter->i; + + if (i < length) { + printf("%d\n", array->array[i]); + loopCounter->i++; + + goto meta(context, Code2); + } + + goto meta(context, Exit); +} + +__code code2_stub(struct Context* context) { + goto code2(context, &context->data[Node]->node.value->array, &context->data[LoopCounter]->loopCounter); +} + __code createData1(struct Context* context, struct Allocate* allocate, struct LoopCounter* loopCounter) { int i = loopCounter->i; @@ -48,6 +66,7 @@ goto meta(context, CreateData2); } + loopCounter->i = 0; goto meta(context, Code1); } @@ -90,7 +109,7 @@ __code createTask2(struct Context* context, struct LoopCounter* loopCounter, struct Task* task, struct Element* element) { int i = loopCounter->i; - task->code = Code1; + task->code = Twice; task->key = i; element->task = task; @@ -167,7 +186,7 @@ goto putQueue4(context, &context->data[ActiveQueue]->queue, &context->data[context->dataNum]->element); } -__code getQueue(struct Context* context, struct Queue* queue) { +__code getQueue(struct Context* context, struct Queue* queue, struct Node* node) { if (queue->count == 0) return; @@ -179,16 +198,16 @@ stack_push(context->code_stack, &context->next); context->next = first->task->code; - stack_push(context->code_stack, &context->next); + node->key = first->task->key; - goto meta(context, Search); + goto meta(context, Get); } else { goto meta(context, GetQueue); } } __code getQueue_stub(struct Context* context) { - goto getQueue(context, &context->data[ActiveQueue]->queue); + goto getQueue(context, &context->data[ActiveQueue]->queue, &context->data[Node]->node); } __code createWorker(struct Context* context, struct LoopCounter* loopCounter, struct Worker* worker) { @@ -200,6 +219,7 @@ worker_context->data[Tree] = context->data[Tree]; worker_context->data[ActiveQueue] = context->data[ActiveQueue]; pthread_create(&worker_context->thread, NULL, (void*)&start_code, worker_context); + worker_context->thread_num = i; loopCounter->i++; goto meta(context, CreateWorker); @@ -224,7 +244,7 @@ } loopCounter->i = 0; - goto meta(context, Exit); + goto meta(context, Code2); } __code taskManager_stub(struct Context* context) {