Linux中奇怪的开关

时间:2011-04-24 05:57:27

标签: c linux linux-kernel

我对Linux内核中的以下开关有一些疑问,有人可以解释最后case,为什么我需要这个案例,如果它是空的?提前谢谢

switch (prev->state) {
    case TASK_INTERRUPTIBLE:
        if (unlikely(signal_pending(prev))) {
            prev->state = TASK_RUNNING;
            break;
        }
    default:
        deactivate_task(prev, rq);
    case TASK_RUNNING:
        ;
    }

EDITED

我从linux 2.4.18中获取它,我目前正在学习,没有评论,为什么这样

2 个答案:

答案 0 :(得分:8)

如果prev->state == TASK_RUNNING并且您没有最后一个案例,则会调用deactivate_task,这可能是不希望的。这只是为TASK_INTERRUPTIBLE执行特殊操作的快速方法,以及TASK_RUNNING之外的其他所有州的不同内容。

答案 1 :(得分:1)

以下是他们在那里做的事情:

If prev->state == TASK_RUNNING -> do nothing.
If prev->state == TASK_INTERRUPTIBLE - > signal_pending() and then possibly deactivate_task()
In any other case just deactivate_task().