Mercurial > hg > Members > kono > Cerium
diff example/task_queue/spe/Hello.cc @ 496:58240647b23b
PS3 double linked TaskQueue worked.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 10 Oct 2009 20:32:55 +0900 |
parents | 9522c376a9fe |
children | 36b323130b1b |
line wrap: on
line diff
--- a/example/task_queue/spe/Hello.cc Sat Oct 10 19:16:09 2009 +0900 +++ b/example/task_queue/spe/Hello.cc Sat Oct 10 20:32:55 2009 +0900 @@ -1,6 +1,7 @@ #include <stdio.h> #include "Hello.h" #include "Func.h" +#include "main.h" /* これは必須 */ SchedDefineTask(Hello); @@ -12,5 +13,43 @@ smanager->printf("[%d] Hello, World!!\n", task_id); + QueuePtr q = (QueuePtr )smanager->global_get(0); + + for(int i=0;i<100;i++) { + TaskQueueInfo *i0 = q->q[i%MAX_QUEUE]; + TaskQueueInfo *i1 = q->q[(i+1)%MAX_QUEUE]; + TaskQueue *q0; + TaskQueue *q1; + + // switch(smanager->get_random() % 4) { + switch(q->j++ % 4 ) { + case 0: + q0 = i0->create(0); + q1 = i1->create(0); + i1->addLast(q0); + i0->addLast(q1); + break; + case 1: + if (TaskQueue *p = i0->poll()) { + i1->addLast(p); + } + break; + case 2: + if (TaskQueue *p = i1->poll()) { + i0->addLast(p); + } + break; + case 3: + if (TaskQueue *p = i0->poll()) { + i0->free_(p); + } + if (TaskQueue *p = i1->poll()) { + i1->free_(p); + } + break; + } + } + + return 0; }