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

青海建设厅职称网站最便宜的网站

青海建设厅职称网站,最便宜的网站,外包加工网是骗人的吗,网站的总体结构工作队列是操作系统中管理和调度异步任务执行的一种机制 一、工作队列介绍 工作队列是实现中断下半部分的机制之一#xff0c;是一种用于管理任务的数据结构或机制。它通常用于多线程#xff0c;多进程或分布式系统中#xff0c;用于协调和分配待处理的任务给可用的工作线程…  工作队列是操作系统中管理和调度异步任务执行的一种机制 一、工作队列介绍 工作队列是实现中断下半部分的机制之一是一种用于管理任务的数据结构或机制。它通常用于多线程多进程或分布式系统中用于协调和分配待处理的任务给可用的工作线程或工作进程。   工作队列的基本原理是将需要执行的任务按顺序排列在队列中并提供一组工作线程或者工作进程来处理队列中的任务。当有新的任务到达时它们会被添加到队列的末尾工作线程或工作进程从队列的头部获取任务并执行相应的处理操作。   工作队列和之前学习的 tasklet 有什么不同呢tasklet 也是实现中断下半部分的机制之一。他们最主要的区别是 tasklet 不能休眠而工作队列是可以休眠的所以tasklet 可以用来处理比较耗时间的事情而工作队列可以处理更耗时间的事情。   工作队列将工作推后以后会交给内核线程去执行。Linux 在启动过程中会创建一个工作者内核线程这个线程创建以后处于 sleep 状态。当有工作需要处理的时候会唤醒这个线程去处理工作。   在内核中工作队列包括共享工作队列和自定义工作队列这俩种类型。这两种类型的工作队列具有不同的特点和用途。   1 共享队列是由内核管理的全局工作队列用于处理内核中一些系统级任务。共享工作队列是内核中一个默认工作队列可以由多个内核组件和驱动程序共享使用。   2 自定义工作队列是由内核或驱动程序创建的特定工作队列用于处理特定的任务。自定义工作队列通常与特定的内核模块或驱动程序相关联用于执行该模块或驱动程序相关的任务。 二、共享工作队列 在 Linux 内核中使用 work_struct 结构体表示一个工作项这些工作组织成工作队列工作队列使用 workqueue_struct 结构体表示。work_struct 结构体表示一个工作项定义在 include/linux/workqueue.h 中如下所示 struct work_struct {atomic_long_t data;struct list_head entry;work_func_t func; /* 工作队列处理函数 */ }; typedef void (*work_func_t)(struct work_struct *work); //工作函数三、 共享工作队列相关接口函数 3.1、初始化函数 简单创建工作很简单直接定义一个work_struct 结构体变量即可然后使用 INIT_WORK 宏来初始化工作INIT_WORK 宏定义如下 #define INIT_WORK(_work,_func)INIT_WORK 宏接受两个参数_work 和 _func分别表示要初始化的工作项和工作项的处理函数。   也可以使用 DECLARE_WORK 宏一次性完成工作的创建和初始化宏定义如下 #define DECLARE_WORK(n, f)参数 n 表示定义的工作(work_struct)f 表示工作对应的处理函数。 3.2、调度/取消调度工作队列函数 工作队列需要调度才能运行的工作的调度函数为schedule_work函数原型如下所示 static inline bool schedule_work(struct work_struct *work)参数是指向工作项的指针。这个函数作用是将工作项提交到工作队列中并请求调度器在合适的时机执行工作项。该函数会返回一个布尔值表示工作项是否成功被提交到工作队列。   如果想要取消该工作项的调度使用以下函数 bool cancel_work_sync(struct work_struct *work);参数是指向工作项的指针。这个函数的作用是取消该工作项的调度。如果工作项已经在工作队列中它将被从队列中移除。如果工作项已经在工作队列中它将被从队列中移除并等待工作项执行完成。函数返回一个布尔值表示工作项是否成功取消。 四、代码示例 4.1、驱动层程序 #include linux/module.h #include linux/init.h #include linux/interrupt.h #include linux/gpio.h #include linux/delay.h #include linux/workqueue.hint irq;struct work_struct test_workqueue; // 工作项处理函数 void test_work(struct work_struct *work) {msleep(1000);printk(This is test_work\n); } // 中断处理函数 irqreturn_t test_interrupt(int irq, void *args) {printk(This is test_interrupt\n);// 提交工作项到工作队列schedule_work(test_workqueue);return IRQ_RETVAL(IRQ_HANDLED); }static int interrupt_irq_init(void) {int ret;irq gpio_to_irq(101); // 将GPIO映射为中断号printk(irq is %d\n, irq);// 请求中断ret request_irq(irq, test_interrupt, IRQF_TRIGGER_RISING, test, NULL);if (ret 0){printk(request_irq is error\n);return -1;}// 初始化工作项INIT_WORK(test_workqueue, test_work);return 0; }static void interrupt_irq_exit(void) {free_irq(irq, NULL); // 释放中断printk(bye bye\n); }module_init(interrupt_irq_init); module_exit(interrupt_irq_exit); 4.2、linux中断下文工作队列之共享工作队列使用API要点 struct work_struct test_workqueue;// 初始化工作项INIT_WORK(test_workqueue, test_work);// 提交工作项到工作队列schedule_work(test_workqueue);
http://www.sadfv.cn/news/299623/

相关文章:

  • 常熟专业做网站电商seo是什么
  • 承德网站开发区地税中国建设银行官网站招聘频道
  • 深圳网站开发一薇666建筑人才网
  • c 做网站实例中英语双语网站咋做
  • 安徽住房和城乡建设部网站首页潍坊优化网站排名
  • 网站公司怎么做运营网站 做 app开发
  • 新型门窗网站模板wordpress响应慢原因
  • 推荐大良网站建设网上最畅销的10种商品
  • 黄页网站大全在线看免费wordpress做外贸
  • 网站建设犀牛睢宁建设局网站
  • dw做的网站品牌建设工作的意义
  • 可信网站免费认证搜索竞价
  • 营销网站建设选择沧州网站建设益志科技
  • 深圳做网站案例seo技术培训教程
  • 扫码进入网站 怎么做window2003iis建好的网站
  • 哪里可以做微网站四川网站建设 旋风
  • 好看大方的企业网站源码.net南京广告公司黄页
  • 用织梦建网站北京营销型网站建设培训班
  • 网站进入百度沙盒电子商务网站开发目标
  • 做百度手机网站优化快临河网站建设
  • 手机免费建设网站制作天津品牌网站设计
  • 2017优秀网站设计欣赏自己创建网站怎么做电商
  • 企业网站展示论文深圳入户申请网站官网
  • 网站建设的优点和不足侵入别人的网站怎么做
  • 广州在线网站制作什么浏览器可以看任何网站
  • 河北省老区建设促进会网站销售网站建设推广
  • 安徽省建设工程信息网官网是什么网站wordpress口腔
  • asp mysql做网站如何在电脑登录wordpress
  • 网站建设制作设计开发福建从化区住房和建设局网站
  • 建设一个招聘网站大概多少费用灵璧县建设局网站