Mercurial > hg > Members > kono > Cerium
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"); }