2

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

我目前拥有的:

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.
         */
    }
}

停止一个正在运行的线程似乎是这样工作的,但是如果线程已经在等待其他东西(例如等待获取锁),我们能做些什么来防止它重新启动,即使它会获得锁?

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

提前致谢。

4

0 回答 0