内核线程的使用

首先介绍几个创建线程相关的函数:

 

 struct task_struct *kthread_create(int (*threadfn)(void *data),
                                    void *data,
                                    const char namefmt[],
                                    ...)

 

创建一个内核线程,但是并不会开始执行,返回task_struct结构体。

创建的线程可以通过:

int wake_up_process(struct task_struct *p)

函数来唤醒。一个线程即一个task。

int kthread_should_stop(void)
通过该函数查看线程是否要停下,
int kthread_stop(struct task_struct *k)
通过此函数来停止一个线程。
一个典型的线程函数的实例如下:
  
  
thread_func(){
    wait_queue_head_t wait_queue;
    DECLARE_WAITQUEUE(wait, current);

    add_wait_queue(&p_thread->wait_queue, &wait);

    __set_current_state(TASK_RUNNING);
    do {
    __set_current_state(TASK_INTERRUPPTABLE);
    schedule();
  __set_current_state(TASK_RUNNING);
	/*todo:......*/
}while(!kthread_should_stop());
    remove_wait_queue(&wait_queue, &wait);


   
   
}
其中的DECLARE_WAITQUEUE与进程调度相关,通过该函数可使线程进入wait状态,以等待被唤醒。


  
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值