Linux kernel 在schedule()之后恢复线程
另一个新手问题: 在下面的代码中,如果线程在调用“set_current_state”之后但在调用“schedule”之前被抢占,该怎么办。再次调度代码时,它是否从“schedule”调用开始,并从运行队列中删除?或者这次忽略“schedule”调用,并从set_current_state(TASK_RUNNING)语句开始Linux kernel 在schedule()之后恢复线程,linux-kernel,Linux Kernel,另一个新手问题: 在下面的代码中,如果线程在调用“set_current_state”之后但在调用“schedule”之前被抢占,该怎么办。再次调度代码时,它是否从“schedule”调用开始,并从运行队列中删除?或者这次忽略“schedule”调用,并从set_current_state(TASK_RUNNING)语句开始 { ... set_current_state(TASK_INTERRUPTIBLE); /* suppose thread is preempted just after
{
...
set_current_state(TASK_INTERRUPTIBLE); /* suppose thread is preempted just after this function call */
schedule();
set_current_state(TASK_RUNNING);
...
}
如果非自愿先占发生在第一行之后第二行之前,那么(或多或少)会发生以下情况:
谢谢!这将帮助我更好地理解优先购买权!:)