专栏首页Linux驱动45.INIT_WORK()工作队列使用

45.INIT_WORK()工作队列使用

介绍

在中断处理中,经常用到工作队列,这样便能缩短中断处理时的时间

中断中通过调用schedule_work(work)来通知内核线程,然后中断结束后,再去继续执行work对应的func函数

示例

当中断来了,立马调用schedule_work(work),然后退出.

中断结束后,内核便会调用_work对应的func函数,最后才来读取按键值,上报按键值,这样就大大缩短了中断处理时间

常用函数

1.

INIT_WORK(work, func);

其中参数1是个work_struct结构体,参数2是个函数名,通过INIT_WORK将work_struct与一个函数建立起来.

其中work_struct结构体定义如下所示:

struct work_struct {
         atomic_long_t data;                       
         struct list_head entry;                     
         work_func_t func;                            //函数指针,指向func函数
#ifdef CONFIG_LOCKDEP
         struct lockdep_map lockdep_map;
#endif
};

2.

schedule_work(work);

通知内核线程,在后续的时间里,系统将会自动调用work结构体对应的func函数

 3.

bool cancel_work_sync(struct work_struct *work);

取消work结构体对应的func函数,一般在exit中使用

接下来,在下一章,将会在中断里用到它们: https://www.cnblogs.com/lifexy/p/9629699.html

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:http://www.cnblogs.com/lifexy/复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 工作队列

    API 路径:kernel/kernel/workqueue.c; kernel/include/linux/workqueue.h

    开源519
  • rabbitmq消息队列——"工作队列"

    二、”工作队列” ? 在第一节中我们发送接收消息直接从队列中进行。这节中我们会创建一个工作队列来分发处理多个工作者中的耗时性任务。 工作队列主要是为了避免进行一...

    用户1141560
  • RabbitMQ 一二事(2) - 工作队列使用

    上篇文章讲了简单队列的使用,这其实就是RMQ给的demo,实际并没有什么用 本篇讲讲工作模式队列,也称之为任务队列 一个生产者发布了多条消息,消费者A可以接受消...

    风间影月
  • rabbitmq工作队列

    下面 我们可以试着将多个消费者共同消费一个队列的情况!我们发送多条消息到消息队列里中!

    止术
  • 使用工作队列管理器(一)

    工作队列管理器是的一项功能,使能够通过以编程方式将工作分配给多个并发进程来提高性能。在引入工作队列管理器之前,可能已经使用 JOB 命令在应用程序中启动多个进程...

    用户7741497
  • 使用工作队列管理器(二)

    可以指定要使用的并行worker jobs的数量,也可以使用默认值,这取决于机器和操作系统。此外,如果已创建类别,则可以指定应从中获取job的类别。

    用户7741497
  • 使用工作队列管理器(四)

    通常,初始化一组工作程序,将工作项排队,然后等待工作程序完成工作项。但是,可能会遇到工作人员作业完成工作项所需的时间比预期更长的情况,或者无法将单个进程专门用于...

    用户7741497
  • 使用工作队列管理器(三)

    一个类别是一个独立的worker jobs池。当初始化一组worker jobs时,可以指定提供worker的类别。如果集合中的任何worker jobs在执行...

    用户7741497
  • RabbitMQ(二) ——工作队列

    RabbitMQ(二)——工作队列 (原创内容,转载请注明来源,谢谢) 一、概述 工作队列模式(work queue),是有多个消费者的情况下,可以共同消费队...

    用户1327360
  • RabbitMQ WorkQueues(工作队列模式)

    工作队列模式就是一个生产者,两个消费者。在初步入门的Hello World简单模式里面我们了解到。简单模式就是一个生产者一个消费者,中间通过中间件进行消息通信。

    兰舟千帆
  • zephyr 工作队列(work queue)

    zephyr中工作队列是基于线程的,简单来说,就是有一个线程一直在等待工作队列的api发来的工作项,当有工作项时(一个待 执行的函数)就处理(把函数调用了),当...

    无限之生
  • RabbitMQ六种队列模式之工作队列模式

    上文我们了解了 RabbitMQ 六种队列模式中的简单队列,代码也是非常的简单,比较容易理解。

    黎明大大
  • RabbitMQ入门:工作队列(Work Queue)

    在上一篇博客《RabbitMQ入门:Hello RabbitMQ 代码实例》中,我们通过指定的队列发送和接收消息,代码还算是比较简单的。

    全栈程序员站长
  • zephyr笔记 2.1.5 工作队列线程

    我正在学习 Zephyr,一个很可能会用到很多物联网设备上的操作系统,如果你也感兴趣,可点此查看帖子zephyr学习笔记汇总。

    twowinter
  • AMQP-RabbitMQ/2/工作队列

    消费者设置一次只发送一条消息,并且在被正确消费之前发继续发送下一条消息。从而使得消费快的消费者比消费慢的消费者消费更多的消息

    喜欢天文的pony站长
  • 简述消息队列在电商系统使用场景以及工作模式

    消息队列(Message Queue),是分布式系统中重要的组件,是一种进程间通信或者是同一进程的不同线程的通信方式。和 http 同步协议不同的是,消息队列是...

    用户4268038
  • springboot项目整合rabbitmq之工作队列

    学习一对多的使用配置,也就是工作队列,简单的说就是消费者通过竞争来接收消息,获得一个消息,谁消费速度快谁能获得足够多的消息。

    用户1956326
  • Linux驱动开发-内核共享工作队列

    工作队列常见的使用形式是配合中断使用,在中断的服务函数里无法调用会导致休眠的相关函数代码,有了工作队列机制以后,可以将需要执行的逻辑代码放在工作队列里执行,只需...

    DS小龙哥

扫码关注腾讯云开发者

领取腾讯云代金券