|
rtt线程唤醒函数中有一个从挂起队列中移除操作, / * remove from suspend list */ rt_list_remove(&(thread->tlist));,可是源码中并未找到挂起队列的定义和相关插入挂起队列操作,这里的移除操作有什么意义?
rt_err_t rt_thread_resume(rt_thread_t thread)
{
register rt_base_t temp;
/* thread check */
RT_ASSERT(thread != RT_NULL);
RT_DEBUG_LOG(RT_DEBUG_THREAD, ("thread resume: %s\n", thread->name));
if (thread->stat != RT_THREAD_SUSPEND)//只对处于挂起的线程进行还原操作
{
RT_DEBUG_LOG(RT_DEBUG_THREAD, ("thread resume: thread disorder, %d\n",
thread->stat));
return -RT_ERROR;
}
/* disable interrupt */
temp = rt_hw_interrupt_disable();//关中断
/* remove from suspend list */
rt_list_remove(&(thread->tlist));//从挂起队列中移除
/* remove thread timer */
rt_list_remove(&(thread->thread_timer.list));//因线程即将运行,所以需要移除定时器,无需再定时
/* change timer state */
thread->thread_timer.parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;//将内核对象的标志设置为定时器非激活标志
/* enable interrupt */
rt_hw_interrupt_enable(temp);//开中断
/* insert to schedule ready list */
rt_schedule_insert_thread(thread);//将线程加入调度器
return RT_EOK;
}
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。
|