我想在内核空间中为keepalive定时器创建线程。但是有一些问题:
1)KThreads:在我的回调函数中我做了循环
while (!kthread_should_stop()) {
// some work
unsigned long j0, j1;
int delay = 5*HZ;
j0 = jiffies;
j1 = j0 + delay;
printk("\n----------thread print----------");
while (time_before(jiffies, j1))
schedule();
}
}
但是当我在模块中调用kthread_stop(keep_timer)时,它等待kthread停止并且我从0松开到延迟秒。我的模块等待这么长时间是一场灾难
2)Tasklet:tasklets是ATOMIC,我无法让它在回调函数内等待延迟秒数
我怎样才能创建一个带有计时器和回调函数的线程,它将处于一个连续的循环中,直到它从模块中被杀死而不等待线程停止?