2012-10-15 71 views
0

以下功能在./kernel/sched/rt.c(v3.5.4定義):enqueue_pushable_task功能內核

static void enqueue_pushable_task(struct rq *rq, struct task_struct *p) 
{ 
     plist_del(&p->pushable_tasks, &rq->rt.pushable_tasks); 
     plist_node_init(&p->pushable_tasks, p->prio); 
     plist_add(&p->pushable_tasks, &rq->rt.pushable_tasks); 

     /* Update the highest prio pushable task */ 
     if (p->prio < rq->rt.highest_prio.next) 
       rq->rt.highest_prio.next = p->prio; 
} 

我所無法理解的是,爲什麼一個要添加和刪除同一個節點一遍又一遍地形成相同的列表。首先通過plist_del從列表中刪除一個節點,並通過plist_add函數將同一個節點添加到同一列表中。任何特定的原因爲什麼這樣做

回答

1

當任務的優先級改變時,它在優先級列表中的位置也必須改變。