Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1248501
  • 博文数量: 261
  • 博客积分: 4196
  • 博客等级: 上校
  • 技术积分: 3410
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-17 17:05
文章分类

全部博文(261)

文章存档

2018年(1)

2017年(22)

2016年(2)

2015年(8)

2014年(27)

2013年(40)

2012年(161)

分类: LINUX

2012-10-12 16:59:18

函数说明:

kthread_create:创建线程。
struct task_struct *kthread_create(int (*threadfn)(void *data),void *data,const char *namefmt, ...);
线程创建后,不会马上运行,而是需要将kthread_create() 返回的task_struct指针传给wake_up_process(),然后通过此函数运行线程。

kthread_run :创建并启动线程的函数:
struct task_struct *kthread_run(int (*threadfn)(void *data),void *data,const char *namefmt, ...);

kthread_stop:通过发送信号给线程,使之退出。

int kthread_stop(struct task_struct *thread);
主意:

  1.线程一旦启动起来后,会一直运行,除非该线程主动调用do_exit函数,或者其他的进程调用kthread_stop函数,结束线程的运行。
  2.但如果线程函数正在处理一个非常重要的任务,它不会被中断的。当然如果线程函数永远不返回并且不检查信号,它将永远都不会停止。

代码:
#include
#include

#ifndef SLEEP_MILLI_SEC
#define SLEEP_MILLI_SEC(nMilliSec)\
        do { \
                long timeout = (nMilliSec) * HZ / 1000; \
                while(timeout > 0) \
                { \
                timeout = schedule_timeout(timeout); \
                } \
        }while(0);
#endif

static struct task_struct * MyThread = NULL;
static int MyPrintk(void *data)
{
        char *mydata = kmalloc(strlen(data)+1,GFP_KERNEL);
        memset(mydata,'\0',strlen(data)+1);
        strncpy(mydata,data,strlen(data));
        while(!kthread_should_stop())
        {
                SLEEP_MILLI_SEC(1000);
                printk("%s\n",mydata);
        }
        kfree(mydata);
        return 0;
}
static int __init init_kthread(void)
{
        MyThread = kthread_run(MyPrintk,"hello world","mythread");
        return 0;
}
static void __exit exit_kthread(void)
{
        if(MyThread)
        {
                printk("stop MyThread\n");
                kthread_stop(MyThread);
                MyThread = NULL;
        }
        return;
}
module_init(init_kthread);
module_exit(exit_kthread);
MODULE_AUTHOR("YaoGang");

这个内核线程的作用就是每隔一秒打印一个“hello world”。
值得一提的是kthread_should_stop函数,我们需要在开启的线程中嵌入该函数,否则kthread_stop是不起作用的。 ......
阅读(950) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~