唤醒或删除workqueue linux内核的工作?

时间:2016-01-13 19:27:12

标签: linux kernel

我有一个工作队伍的作品,在他的函数中有一个msleep()。是否有一些功能来唤醒工作或删除它而不等待它完成睡眠?或者也许在工作中有相同的延迟功能可以中断?非常感谢。

1 个答案:

答案 0 :(得分:1)

如果当前正在执行工作,则无法在未完成的情况下停止工作。 通常,msleep()可以用wake_up_process(task)中断,但是从外部你不知道执行工作队列的过程(任务)。

如果你想让你的工作暂停在外面可以中断,你应该使用wake_up-aware功能。例如,wait_for_completion_timeout

DECLARE_COMPLETION(comp);

void work_func(struct work* work)
{
    ...
    // sleep for *m* miliseconds
    if(wait_for_completion_timeout(&comp, msecs_to_jiffies(m)))
    {
        // sleep has been interrupted
    }
    ...
}

some_func()
{
    ...
    // No futher needs to work
    complete(&comp);
}

注意,*_timeout函数使用 jiffies 来计算间隔。