Linux内核:暂停其他task_struct

时间:2013-01-08 16:50:28

标签: linux linux-kernel

是否可以暂停与代表内核当前正在执行的任务不同的任务?要停止当前任务,可以将其设置为非活动状态并调用计划,但是另一个任务呢?

我目前的情况:

void disable_thread(struct task_struct *tsk) {

    if (tsk->state == TASK_RUNNING) {

        /*
         * A running task - mark it stopped and wait for it to be descheduled
         */

        tsk->state = TASK_INTERRUPTIBLE;
        wait_task_inactive(tsk, TASK_INTERRUPTIBLE);

    } else if (tsk->state == TASK_INTERRUPTIBLE || tsk->state == TASK_UNINTERRUPTIBLE) {

        /*
         *  // TODO: what to do with tasks already waiting for something else?
         */

    } else {

        /*
         * This task's state seems to indicate that it's dead, no need to disable it anymore.
         */
    }
}

停止正在运行的线程似乎以这种方式工作,但是如果线程已经在等待其他东西(例如等待获取锁定),我们可以做什么,以防止它重新启动,即使它会获得锁定? / p>

我正在实施一项安全功能,如果需要可以提供更多上下文。

提前致谢。

0 个答案:

没有答案