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

衡水做网站报价wordpress主题 简约

衡水做网站报价,wordpress主题 简约,取消wordpress 注册邮箱验证,188旅游网站源码下载工作队列是操作系统中管理和调度异步任务执行的一种机制 一、工作队列介绍 工作队列是实现中断下半部分的机制之一#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.huolong8.cn/news/40379/

相关文章:

  • 网站 虚拟主机WordPress主题后门检测
  • 江山网站建设如何推广做引流找客源
  • 广州设计企业网站做网站前期构架图
  • 免费做兼职的网站有吗黑色大气网站
  • 可以做砍价链接的网站网站seo内链建设
  • 长沙网站改版自适应网站建设方案
  • 电力建设科学技术进步申报网站网站建设的技能有哪些内容
  • 电商网站的模块百度关键词竞价和收费的方法
  • 有了自己的网站怎样做后台网站后台更换首页图片
  • 南海网站建设价格wordpress搜索结果
  • 榆林网站开发智慧物流企业网站建设方案
  • dw软件做的东西怎么在网站用joomla 网站模版
  • 网站认证费用策划书模板免费
  • 阿雷网站建设海口网球场
  • 专业找工作网站下载搜索引擎优化seo公司
  • 关于建设网站的合作合同免费制作公司网站
  • 没有服务器怎么做网站做视频网站 视频放在哪
  • 深圳网站建设 推荐xtdseo拼多多电商运营模式
  • 小说网站流量怎么做网站规划对网站建设起到什么作用
  • 凌源市建设局网站搞笑证书图片在线制作
  • 做一个能注册用户的网站网站需要服务器吗?
  • 网站源码可以做淘宝客ppt模板免费下载网站 知乎
  • 最便宜的网站空间广州专业网站设计定制
  • 无锡网站建设工作室企业邮箱是怎么样的
  • 合肥网站制作QQ五金网站制作
  • 企业电商网站商城建设萧山网络公司
  • 营销型企业网站建设的功能北京网络营销北京
  • 专业制作网站 上海做阅读理解的网站
  • 电子商务网站建设的目的是开展网络营销起零网站建设
  • 地方门户网站模板pc网站同步手机网站