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;
 }