简介
kthread只在内核态运行的,由于在内核态,它没有独立的地址空间,但是有独立的栈。
API
(1) kthread_create
struct task_struct *kthread_create(int(*threadfn)(void *data),
void *data,
const char namefmt[],
...)
该函数用来创建一个kthread,threadfn是kthread的入口函数,data是参数,namefmt是线程名称。
该函数只是创建一个kthread,但并没有运行,如果需要运行,还需要调用wake_up_process()函数
(2) kthread_run
#definekthread_run(threadfn, data, namefmt, ...) \
({ \
struct task_struct *__k \
= kthread_create(threadfn, data,namefmt, ## __VA_ARGS__); \
if (!IS_ERR(__k)) \
wake_up_process(__k); \
__k; \
})
kthread_run创建一个kthread,并且运行该thread
(3) kthread_ bind
void kthread_bind(struct task_struct*k, unsigned int cpu)
将某个thread绑定在某个CPU上运行;
(4) kthread_ stop
int kthread_stop(structtask_struct *k);
停止某个kthread。
(5) kthread_should_stop
intkthread_should_stop(void)
判断当前kthread是否需要停止。