Linux驱动中completion接口浅析_init_completion linux 驱动-程序员宅基地

技术标签: struct  file  linux  module  makefile  user  

     completion是一种轻量级的机制,它允许一个线程告诉另一个线程工作已经完成。可以利用下面的宏静态创建completion:
                         DECLARE_COMPLETION(my_completion);
       

        如果运行时创建completion,则必须采用以下方法动态创建和初始化:
                         struct compltion my_completion;
                          init_completion(&my_completion);

     

        completion的相关定义包含在kernel/include/linux/completion.h中:

                        struct completion {
                                     unsigned int done;
                                     wait_queue_head_t wait;
                         };


#define COMPLETION_INITIALIZER(work) /
                                                           { 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait) }

#define DECLARE_COMPLETION(work) /
                                                      struct completion work = COMPLETION_INITIALIZER(work)

static inline void init_completion(struct completion *x)
{
          x->done = 0;
          init_waitqueue_head(&x->wait);
}

 

       要等待completion,可进行如下调用:
                    void wait_for_completion(struct completion *c);

       触发completion事件,调用:
                   void complete(struct completion *c);    //唤醒一个等待线程
                   void complete_all(struct completion *c);//唤醒所有的等待线程

        为说明completion的使用方法,将《L

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zjut_jasmine_tea/article/details/2143081

智能推荐

IDEA 之常用插件(提高开发效率)_jindent-source code formatter-程序员宅基地

文章浏览阅读2.2k次。lombok代码注解插件<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version></dependency>Translatio..._jindent-source code formatter

reactive代理_Proxy API--Vue3响应式对象reactive揭秘-程序员宅基地

文章浏览阅读536次。Proxy API对应的Proxy对象是ES2015就已引入的一个原生对象,用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等)。从字面意思来理解,Proxy对象是目标对象的一个代理器,任何对目标对象的操作(实例化,添加/删除/修改属性等等),都必须通过该代理器。因此我们可以把来自外界的所有操作进行拦截和过滤或者修改等操作。基于Proxy的这些特性,常用于:创建一个可“响应式”的对象..._reactive 响应式 proxy

CentOS7 Yum卸载open-jdk_yum删除openjdk-程序员宅基地

文章浏览阅读2.5k次。查看CentOS自带JDK是否已安装 1 [root@test ~]# yum list installed |grep java 若有自带安装的JDK,应如下操作进行卸载CentOS系统自带Java环境 1 2 3 4 5 6 7 8 9 10 [r..._yum删除openjdk

电视信号视频制式中CCIR和EIA,PAL与NTSC的意思_ccir pal-程序员宅基地

文章浏览阅读6.1k次,点赞2次,收藏13次。其实这两个制式中:CCIR和EIA均是黑白输入制式,PAL与NTSC是彩色输入制式。不过在网上还看到了一个相关的故事:这又得说故事了,而且还牵涉些政治问题及商业利益!很久很久以前,有些人发明了电视机,当然,是黑白的!这时,问题来了:大家在做电视机,总得有个标准,否则无法兼容.在美国,制定标准如下:1.每一划面525条水平扫瞄线.2.每秒30张(frame)3.采交错式扫瞄(_ccir pal

征集玩家排版_征集作家:开放式食品和饮料&LISA15演讲者访谈-程序员宅基地

文章浏览阅读84次。工具征集贴 11月,Opensource.com将推出两个新系列。 是的,11月-现在是计划时间! 我们邀请您发送电子邮件给我们 ,其中包括您的姓名,您想参加的系列以及您的故事构想,以做出贡献。 您也可以提交到我们的网络表单 。 对我们来说写作是一个有趣而轻松的过程,只需阅读作家的推荐书即可 。 公开食品和饮料 什么是开放式餐饮系列? 打开容器? 对于本系列,我们希望您了解有关使用..._什么是开放性食品

qt 嵌入pcl窗口可视化点云:_如何在qt找那个嵌入pcl点云显示窗口-程序员宅基地

文章浏览阅读5k次,点赞4次,收藏48次。qt 嵌入pcl窗口可视化点云:先来个总结:工作需要完成QT + pcl可视化点云,本文分别介绍了不同版本之间搭配安装所踩的坑,如果你的电脑系统比较新,安装的系统插件比较少,那应该还是可以很快装完的,本文主要详细介绍在高版本的QT的情况下其余插件的安装情况和遇到的坑,如果你装不成功,Don’t give up,你需要的只是一个纯净的系统而已!因为原来装了很多软件的系统有些依赖或者库可能版本不..._如何在qt找那个嵌入pcl点云显示窗口

随便推点

在dojo中使用JSON-RPC_jsonicrpcresult serviceinvoker-程序员宅基地

文章浏览阅读4.4k次。 在dojo中使用JSON-RPC1 JSON-RPC规范JSON-RPC 是一种轻量级远程过程调用协议,类似JAVA的RMI和.NET中的Remoting。在此协议中,通讯双方的请求对象和响应对象使用JSON编码方式,通过前面的“JSON编码简介”可以简单了解其编码规则。 1.1 请求,响应和通知对象首先客户端向远程服务器发出远程调用请求,该请求对_jsonicrpcresult serviceinvoker

基于PID极点配置法的直流电机角速度控制系统simulink仿真_simulink 角速度pid控制器-程序员宅基地

文章浏览阅读1k次,点赞20次,收藏16次。直流电机因其良好的动态响应和易于控制的特点,在工业自动化、机器人技术、电动汽车等多个领域有着广泛应用。精确控制其角速度对于保证设备性能和稳定性至关重要。PID控制器以其结构简单、参数易于整定的优点成为首选控制策略。而极点配置法通过设计控制器传递函数的极点位置,可以有效改善系统的动态性能和稳定性。_simulink 角速度pid控制器

android针对c++ stl支持的配置_app_stl := c++_static-程序员宅基地

文章浏览阅读4.1k次。Android NDK从r5b版本开始有官方支持的STL了,有一个crystax版本早已经支持。官方的支持有两个版本一个是gnu的,一个是stlport。如果你需要在你的NDK程序中使用STL,那么需要在Application.mk文件中添加一个选项,就是APP_STL := stlport_static。 其中APP_STL的取值有以下四种: system --> 系统默认的最小支持的_app_stl := c++_static

Mac系统重装 “未能安装在您的电脑上 没有符合安装资格的软件包” 具体解决方案_osx未能安装在您的电脑没有符合安装资格的软件包-程序员宅基地

文章浏览阅读3.2w次,点赞29次,收藏57次。在重装版本较旧的macOS或OS X时,在进行了漫长的系统下载过程之后会经历一个令人不解的提示 **“没有符合条件的软件包”并且在屏幕下方会有“重新启动”**按钮主要是由于系统时间已不符合apple的软件验证搜罗了一些解决方案总是反复出错,最后找到一个讲清楚的方案才发现是网上很多说法没有解释清楚步骤。重装的详细操作:【以OS X EI Capitan为例】使用磁盘工具抹掉对应系统盘,连接到 wifi 或插入以太网,回到装机系统界面选择重新安装系统,等待下载osx并直至失败并跳出上图界面(这个过_osx未能安装在您的电脑没有符合安装资格的软件包

【Linux】命名管道&命名管道和匿名管道的对比&命令行中的管道_程序中使用管道,跟命令行中管道一样吗-程序员宅基地

文章浏览阅读460次。注意:实现服务端(server)和客户端(client)之间的通信之前,我们需要先让服务端运行起来,让服务端运行后创建一个命名管道文件,然后再以读的方式打开该命名管道文件,之后服务端就可以从该命名管道当中读取客户端发来的通信信息了。对于如何让客户端和服务端使用同一个命名管道文件,这里我们可以让客户端和服务端包含同一个头文件,该头文件当中提供这个共用的命名管道文件的文件名,这样客户端和服务端就可以通过这个文件名,打开同一个命名管道文件,进而进行通信了。_程序中使用管道,跟命令行中管道一样吗

“Makefile:2: *** missing separator. Stop.“错误如何解决-程序员宅基地

文章浏览阅读1k次。这是因为在Makefile文件中,命令(如build、run、clean等)必须以【tab】键开始。所以检查一下Makefile文件里,命令之后是否以【tab】键开始,而不是空格,如果是空格,改成【tab】键。为啥会出现上述错误?_makefile:2: *** missing separator. stop.

推荐文章

热门文章

相关标签