linux内核编程-----内核线程kthread

一、序言

      在linux驱动中需要创建多线程,实现同一时刻执行多个任务。这个时候我们就需要内核机制----kthread。

二、内核API

1.创建线程

struct task_struct *ret = kthread_create(threadfn, data, namefmt, arg...);

2.唤醒线程
      将创建好的线程句柄传入该函数即可运行线程。

int wake_up_process(struct task_struct *tsk);

3.一键创建kthread
      其实就是将1,2合并而已。

#define kthread_run(threadfn, data, namefmt, ...)
({
	struct task_struct *__k
		= kthread_create(threadfn, data, namefmt, ## __VA_ARGS__);
	if(!IS_ERR(__k))
		wake_up_process(__k);
	__k;
})

4.线程绑定到cpu

void kthread_bind(struct task_struct*k, unsigned int cpu)

5.停止某个kthread

int kthread_stop(struct task_struct *k);

6.判断当前kthread是否需要停止

int kthread_should_stop(void)

三、demo程序

static int threadfn(void * __dev)
{
	while(!kthread_should_stop()) {
	}
	return 0;
}
int probe()
{
	struct task_struct *th;
	
	th = kthread_run(threadfn, dev, "threadfn_name");
	if (IS_ERR(th)) {
		dev_err(dev, "unable to start control thread\n");
		goto errout;
	}
 //...
 errout:
 	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值