diff example/many_task/sort.cc @ 940:0d404f6c36a8

unknown dead lock still...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 31 Jul 2010 16:44:10 +0900
parents 9cfac2e8fc2e
children 0c11c2fd7e63
line wrap: on
line diff
--- a/example/many_task/sort.cc	Sat Jul 31 12:18:19 2010 +0900
+++ b/example/many_task/sort.cc	Sat Jul 31 16:44:10 2010 +0900
@@ -4,14 +4,13 @@
 #include "Func.h"
 #include <string.h>
 
-static void sort_start(SchedTask *);
 extern void check_data();
+extern int all;  // allocate task at once
 
-static DataPtr data;
-static  int data_length;
-static  int cpuNum;
-
-extern int all;
+static void sort_start(SchedTask *);
+static int data_length;
+static int cpuNum;
+static int split_num;
 
 /**
  * 一つの block にある data の数が MAX_BLOCK_SIZE 超えないような
@@ -37,10 +36,10 @@
 }	
 
 
-HTaskPtr *fsort;
-HTaskPtr *bsort;
-int split_num;
+static HTaskPtr *fsort;
+static HTaskPtr *bsort;
 
+static DataPtr data;
 
 /**
  * btask が全て終了したら、再び sort_start を実行する
@@ -218,27 +217,25 @@
 	}
     }
 
-    HTask *restart = manager->create_task(RESTART,0,0,0,0);
+    HTaskPtr restart = manager->create_task(RESTART,0,0,0,0);
     for (int i = 0; i < split_num; i++) {
 	if (!all) restart->wait_for(fsort[i]);
 	fsort[i]->spawn();
     }
     restart->spawn();
+}
 
-}
 #endif
 
 void check_data()
 {
-    int flag = 1;
     for(int i=0; i< data_length-1;i++) {
 	if (data[i].index>data[i+1].index)  {
 	    printf("Data are not sorted at %d. %d > %d \n",i, data[i].index,data[i+1].index);
-	    flag = 0;
-	    break;
+	    return;
 	}
     }
-    if (flag) printf("Data are sorted\n");
+    printf("Data are sorted\n");
 }