是否可以暂停与内核当前正在执行的任务不同的任务?要停止当前任务,可以将其设置为非活动并调用计划,但不同的呢?
我目前拥有的:
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.
*/
}
}
停止一个正在运行的线程似乎是这样工作的,但是如果线程已经在等待其他东西(例如等待获取锁),我们能做些什么来防止它重新启动,即使它会获得锁?
我正在实施一项安全功能,如果需要,可以提供更多上下文。
提前致谢。