Mercurial > hg > Members > kono > Cerium
diff TaskManager/kernel/ppe/TaskManagerImpl.cc @ 498:cb5ecfc5aaa3
double linked HTaskInfo/HTask
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 11 Oct 2009 11:46:41 +0900 |
parents | 9d225ba0c34f |
children | eacbcdb23986 |
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc Sat Oct 10 21:05:55 2009 +0900 +++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc Sun Oct 11 11:46:41 2009 +0900 @@ -14,9 +14,10 @@ TaskManagerImpl::TaskManagerImpl(int num) : machineNum(num) { - activeTaskQueue = new TaskQueueInfo(); - waitTaskQueue = new TaskQueueInfo(); - taskQueueImpl = new TaskQueueInfo(); + activeTaskQueue = new HTaskInfo(); + waitTaskQueue = new HTaskInfo(); + htaskImpl = waitTaskQueue ; // any HTaskInfo + taskQueueImpl = new TaskQueueInfo(); } /** @@ -38,8 +39,7 @@ // systask_finish->wait_for(systask_finish); // とかなって無限ループになるので、 // これだけは明示的に append_waitTask() で - TaskQueuePtr q = taskQueueImpl->create(systask_finish); - append_waitTask(q); + append_waitTask(systask_start); } HTaskPtr @@ -82,11 +82,10 @@ { // waiter // master // waitee // slave - TaskQueuePtr q = taskQueueImpl->create(task); if (task->wait_i->empty()) { - append_activeTask(q); + append_activeTask(task); } else { - append_waitTask(q); + append_waitTask(task); } systask_finish->wait_for(task); @@ -96,7 +95,7 @@ * Task を実行可能キューに追加する */ void -TaskManagerImpl::append_activeTask(TaskQueuePtr q) +TaskManagerImpl::append_activeTask(HTaskPtr q) { activeTaskQueue->addLast(q); } @@ -131,20 +130,20 @@ wait_i->free_(p->waiter); if (wait_i->empty()) { - waitTaskQueue->remove(you->self); - append_activeTask(you->self); + waitTaskQueue->remove((HTaskPtr)you->task); + append_activeTask((HTaskPtr)you->task); } wait_i->free_(p); } me->post_func(me->post_arg); - htaskImpl->free(me); + htaskImpl->free_(me); } void -TaskManagerImpl::append_waitTask(TaskQueuePtr q) +TaskManagerImpl::append_waitTask(HTaskPtr q) { waitTaskQueue ->addLast(q); }