Mercurial > hg > Members > kono > Cerium
diff TaskManager/kernel/ppe/TaskManagerImpl.cc @ 480:46464727d825
TaskQueueInfo initiaization...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 05 Oct 2009 12:24:07 +0900 |
parents | 5bda98b0b56d |
children | 4896dffad67c |
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc Mon Oct 05 10:36:37 2009 +0900 +++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc Mon Oct 05 12:24:07 2009 +0900 @@ -13,7 +13,11 @@ } TaskManagerImpl::TaskManagerImpl(int num) - : machineNum(num), activeTaskQueue(NULL), waitTaskQueue(NULL) {} + : machineNum(num) { + activeTaskQueue = new TaskQueueInfo(); + waitTaskQueue = new TaskQueueInfo(); + taskQueueImpl = new TaskQueueInfo(); +} /** * 一番最初に PPE で実行される systask_start @@ -77,7 +81,7 @@ { // waiter // master // waitee // slave - if (task->wait_i == NULL) { + if (task->wait_i->empty()) { append_activeTask(task); } else { append_waitTask(task); @@ -117,9 +121,7 @@ void TaskManagerImpl::check_task_finish(HTaskPtr task) { - TaskQueue *p = task->wait_me->getFirst(); - while(p) { - TaskQueue *next = p->next; + while(TaskQueue *p = task->wait_me->poll()) { HTaskPtr htask = (HTaskPtr)p->task; TaskQueueInfo *wait_i = htask->wait_i; // 相手の wait queue から自分(を指しているTaskQueue)を削除 @@ -128,7 +130,6 @@ // queue を free する wait_i->free(p->waiter); wait_i->free(p); - p = next; } task->post_func(task->post_arg); @@ -150,15 +151,11 @@ void TaskManagerImpl::wakeup_waitTask(void) { - TaskQueuePtr p = waitTaskQueue->getFirst(); - while (p) { + while (TaskQueuePtr p = waitTaskQueue->poll()) { HTaskPtr task = (HTaskPtr)p->task; - TaskQueue *next = p->next; - if (task->wait_i == NULL) { - waitTaskQueue->remove(p); + if (task->wait_i->empty()) { activeTaskQueue->addLast(p); } - p = next; } }