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) {