当前位置: 首页 > ai >正文

工作队列-schedule_delayed_work()用法

原文地址:schedule_delayed_work()用法 作者:Valley
 第一篇 工作队列
           在Linux内核中,对下半部(或者说推后执行的工作)的处理方式有好几种,包括BH(bottom
           half),软中断,Tasklets和工作队列等等。在2.6内核中,大名鼎鼎的BH处理被废除,新增了更方便的工作队列。工作队列的方便之处在于它把 工作推后,交由一个内核线程去执行,这个内核线程总会在进程上下文执行,因此,它就可以很方便的持有信号量(semaphore),当然也可以允许睡眠。
           内核对工作队列的处理是通过工作者线程完成的。工作者线程在一般情况下处于睡眠状态,当我们把需要推迟执行的工作注册到工作队列中之后,唤醒工作者线程会 遍历工作队列中的每个待处理的工作,并执行工作队列结构work_struct中的func函数。这里涉及到两个概念:工作者线程和工作队列。首先看看我 们最关心的工作队列。
           struct work_struct *delayed_work;
           INIT_WORK(delayed_work, delayed_work_handler, data);
           schedule_work(delayed_work);
           delayed_work是我们声明的工作队列;通过INIT_WORK对工作队列进行初始化,delayed_work_handler是工作队列的处 理函数,data是传递给处理函数的参数;最后调用schedule_work唤醒工作者线程处理推后执行的工作。如果需要经过一段延迟以后再执行工作, 可以调用:
           schedule_delayed_work(delayed_work, delay);     //delay 是需要延迟的节拍数
           另外还有一种静态创建工作队列的方式:
           DECLARE_WORK(name, void (*func) (void *), void *data);
           大部分情况下我们了解到这里已经足够了。工作者线程可以放心的交给内核去完成。对于工作者线程的使用有两种方式,一是直接使用内核中每个CPU对应的一个 缺省工作者线程envents/n(n代表CPU的序号,从0开始);再者就是自己创建一个专用的工作者线程。对于通常情况下,驱动开发者是不必关心工作 者线程的,缺省的工作者线程能够做的很好。如果缺省的队列不能满足要求,自己创建一个工作者线程也很简单,只需要调用:
           struct workqueue_struct *create_workqueue(const char *name);
           调度时使用如下函数:
           int queue_work(struct workqueue_struct *wq, struct work_struct *work);
           或
           int queue_delayed_work(struct workqueue_struct *wq, struct work_struct
           *work, unsigned long delay);
           它们与schedule_work()以及schedule_delayed_work()是类似的。
http://www.xdnf.cn/news/11095.html

相关文章:

  • CC2630 CC2650 zigbee开发系列之入门 第1步
  • PostgreSQL性能分析工具-PoWA
  • 最小生成树之Kruskal算法
  • 腾讯QQ珊瑚虫外挂原理分析
  • 检查服务器端口是否开启怎么查看
  • web快速入门之基础篇-css:1、样式表:内联样式、内部样式表、外部样式表
  • ContextLoaderListener作用详解
  • Linux平台设备和驱动
  • CEO、COO、CFO、CIO、CTO、CMO的中文是什么?
  • TI AM335X处理器介绍
  • WordPress 主题教程:从零开始制作 WordPress 主题
  • 购物车下单
  • Virtualbox虚拟机网络配置详解
  • (为了搭建win7+office环境)步骤说明
  • 世界各国Google网址大全
  • QGIS 矢量数据属性表中文乱码解决方案:4 步修复编码匹配问题
  • LAN、WAN、WLAN的区别
  • CTF入门教程(非常详细)从零基础入门到竞赛,看这一篇就够了!
  • 外链查询工具大全
  • 虚拟机中安装Red-Hat 9.3系统详细教程
  • 制作一个简单HTML中华传统文化网页设计源码(HTML+CSS)
  • 俄罗斯黑客技术有多牛(非常详细)零基础入门到精通,收藏这一篇就够了
  • 怎么升级服务器浏览网页速度快,如何快速提升网页速度有哪些优化技巧
  • 熊猫烧香病毒源代码及分析
  • 评测华数彩虹盒子(BOX)
  • MR学生总成绩报表以及平均成绩报表(云计算作业20180524)
  • 人工智能产业图谱
  • 讲解wpe抓包,封包
  • A股各概念板块龙头股大全
  • 2006年中文博客封神榜