• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 基于内核线程的创建、使用和退出以及延时宏的补充说明介绍

基于内核线程的创建、使用和退出以及延时宏的补充说明介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了内核线程,linux内核线程,创建内核线程,windows内核线程,用户线程和内核线程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

相关函数:

kthread_create():创建内核线程

kthread_run():创建并启动线程的函数。

({                                                            /

    struct task_struct *__k                                        /

           = kthread_create(threadfn, data, namefmt, ## __VA_ARGS__); /

    if (!IS_ERR(__k))                                        /

           wake_up_process(__k);                                /

    __k;                                                     /

})
</div>
kthread_stop():通过发送信号给线程,使之退出。

同时,在调用kthread_stop函数时,线程函数不能已经运行结束。否则,kthread_stop函数会一直进行等待。

 

内核线程的一般框架

int threadfunc(void *data){

        …

        while(1){

               set_current_state(TASK_UNINTERRUPTIBLE);

               if(kthread_should_stop()) break;

               if(){//条件为真

                      //进行业务处理

               }

               else{//条件为假

                      //让出CPU运行其他线程,并在指定的时间内重新被调度

                      schedule_timeout(HZ);

               }

        }

        …

        return 0;

}

 

线程相关测试命令

  可以使用top命令来查看线程(包括内核线程)的CPU利用率。命令如下:

    top –p 线程号

  可以使用下面命令来查找线程号:

    ps aux|grep 线程名

 

示例程序:使用模块加载内核线程,实现每1s在内核中打印字符。

(makefile略去,和以前一篇博文一样的写法。)

static struct task_struct *my_task = NULL;

static int my_kthread(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 kernel_thread_init(void)
{
    int err;
    printk(KERN_ALERT "Kernel thread initalizing...\n");
    my_task = kthread_create(my_kthread,"hello world","mythread");
    if(IS_ERR(my_task)){
        printk("Unable to start kernel thread./n");
        err = PTR_ERR(my_task);
        my_task = NULL;
        return err;
    }
    wake_up_process(my_task);
    return 0;#include <

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于内核线程的创建、使用和退出以及延时宏的补充说明介绍
  • 内核线程优先级设置的方法介绍

相关文章

  • 2017-05-28c语言实现冒泡排序、希尔排序等多种算法示例
  • 2017-05-28使用C/C++语言生成一个随机迷宫游戏
  • 2017-05-28C语言中全局数组和局部数组的问题
  • 2017-05-28C语言数据结构 栈的基础操作
  • 2017-05-28简要介绍C++编程中的友元函数和友元类
  • 2017-05-28C++的try块与异常处理及调试技术实例解析
  • 2017-05-28使用WindowsAPI获取录音音频的方法
  • 2017-05-28c++中数字与字符串之间的转换方法(推荐)
  • 2017-05-28虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析
  • 2017-05-28C语言位运算和sizeof运算符详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 顺序线性表的代码实现方法
    • C++中的delete不会将操作数置0
    • C++利用stringstream进行数据类型转换实例
    • 简单介绍C++中变量的引用
    • C++对象的浅复制和深复制详解及简单实例
    • 剖析C++中的常量表达式与省略号的相关作用
    • C++中的重载、覆盖、隐藏介绍
    • C++使用递归函数和栈操作逆序一个栈的算法示例
    • 基于C++浮点数(float、double)类型数据比较与转换的详解
    • C++实现单链表按k值重新排序的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有