wait_event_interruptible_locked的使用方法

2023-05-16

wait_event_interruptible_locked() interface


New wait_event_interruptible{,_exclusive}_locked{,_irq} macros added.
They work just like versions without _locked* suffix but require the
wait queue's lock to be held.  Also __wake_up_locked() is now exported
as to pair it with the above macros.

The use case of this new facility is when one uses wait queue's lock
to  protect a data structure.  This may be advantageous if the
structure needs to be protected by a spinlock anyway.  In particular,
with additional spinlock the following code has to be used to wait
for a condition:

spin_lock(&data.lock);
...
for (ret = 0; !ret && !(condition); ) {
	spin_unlock(&data.lock);
	ret = wait_event_interruptible(data.wqh, (condition));
	spin_lock(&data.lock);
}
...
spin_unlock(&data.lock);

This looks bizarre plus wait_event_interruptible() locks the wait
queue's lock anyway so there is a unlock+lock sequence where it could
be avoided.

To avoid those problems and benefit from wait queue's lock, a code
similar to the following should be used:

/* Waiting */
spin_lock(&data.wqh.lock);
...
ret = wait_event_interruptible_locked(data.wqh, (condition));
...
spin_unlock(&data.wqh.lock);

/* Waiting exclusively */
spin_lock(&data.whq.lock);
...
ret = wait_event_interruptible_exclusive_locked(data.whq, (condition));
...
spin_unlock(&data.whq.lock);

/* Waking up */
spin_lock(&data.wqh.lock);
...
wake_up_locked(&data.wqh);
...
spin_unlock(&data.wqh.lock);

When spin_lock_irq() is used matching versions of macros need to be
used (*_locked_irq()).  

 看到wait_event_interruptible_locked这个api我内心是迷茫的,不知道这个玩意儿怎么用,搜了下看到了别人的解释如上。

翻译下:

因为自旋锁锁定期间不能进入睡眠,那么进入睡眠前就应该释放自旋锁,如果手动操作会比较繁琐,这个接口就是为了统一一下操作,他操作的时候 wait_queue_head_t自带的自旋锁lock,在进入休眠前释放这个锁,然后睡眠,醒了以后再获取到这个锁,这样就是在睡眠过程中自旋锁是释放的状态。

注意,使用这个函数之前,这个自带的自旋锁应该是先获取到的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wait_event_interruptible_locked的使用方法 的相关文章

  • 如何读取(并解析)文件,然后附加到同一文件而不出现异常?

    我试图在 Haskell 中正确读取文件 但似乎收到此错误 异常 neo txt openFile 资源繁忙 文件被锁定 这是我的代码 import Data Char import Prelude import Data List imp
  • 显示加载时的等待警报视图

    我希望当我的应用程序启动时 它会显示一个警报视图大约 5 秒 然后根据后台进程的结果 它将显示另一个警报视图 我遇到的问题是 当我尝试使用睡眠来等待后台进程发生时 第一个警报未显示并等待 5 秒 应用程序显示应用程序的第一个视图 然后 5
  • 如何创建javascript延迟函数[重复]

    这个问题在这里已经有答案了 我有一个 javascript 文件 在几个地方我想添加一个小的延迟 这样脚本就会到达该点 等待 3 秒 然后继续执行其余的代码 我想到的最好方法是创建一个函数 我可以从脚本中的任何位置调用该函数 functio
  • 等待几秒钟而不阻止 UI 执行

    我想在两条指令之间等待几秒钟 但不阻止执行 例如 Thread Sleep 2000 这不好 因为它会阻塞执行 我的想法是 我调用一个方法 然后等待 X 秒 例如 20 秒 监听即将到来的事件 在 20 秒结束时 我应该根据 20 秒内发生
  • 如何在循环中运行固定数量的进程?

    我有一个这样的脚本 bin bash for i 1 to 200000 do create input file run java done 我需要同时运行多个 8 或 16 个进程 java 但我不知道如何运行 我知道wait可以提供帮
  • Java 每 0.5 秒在动画中移动 jlabel

    我想要简单的动画每 0 5 秒设置一次位置 但它不会仅在循环结束时设置位置动画 int x 1 整数y 1 while x lt 100 jLabel1 setLocation x y x x 10 y y 10 try Thread sl
  • Python - 等待没有高CPU使用率的条件

    在这种情况下 假设我想等待一个可能在任何随机时间发生的条件发生 while True if condition Do Whatever else pass 正如您所看到的 直到条件为 True 时才会发生 pass 但是 虽然条件不成立 但
  • 等待所有线程完成java中的工作

    我正在编写一个具有 5 个线程的应用程序 这些线程同时从 Web 获取一些信息并填充缓冲区类中的 5 个不同字段 当所有线程完成其工作时 我需要验证缓冲区数据并将其存储在数据库中 我该如何做到这一点 当所有线程完成工作时收到警报 我采取的方
  • android中如何让代码暂停几秒钟?

    基本上 我需要在一个操作中暂停 仅几秒钟 以便用户可以看到在采取下一个操作之前会发生什么 因此 对于二十一点来说 当轮到庄家并且他决定要牌时 他就牌 然后添加一张牌 然后他决定下一步要做什么 因此 在他决定下一步要做什么之前 我希望代码暂停
  • 用于在任务内等待的 Thread.Sleep 的无冻结替代方案[重复]

    这个问题在这里已经有答案了 我必须调用一个 Web API 其工作原理如下 上传歌曲 请求对该歌曲进行具体分析 wait该过程已完成 检索并返回结果 我有一个问题 没有 3 我已经尝试过了Thread Sleep但这会冻结用户界面 如何在不
  • boost 线程中的虚假解锁

    我在提升线程文档 http www boost org doc libs 1 38 0 doc html thread synchronization html thread synchronization condvar ref toda
  • Java等待函数

    我想知道你们是否可以帮助我 我正在尝试使用 Java 内置的图形模块制作一个动画程序 事实是 Java 立即执行所有操作 不同的动画之间没有任何时间 最终产品只是最后一张图片 我需要一个在每张图片之间放置半秒的功能 任何帮助表示赞赏 规格
  • Perl后台进程

    我正在尝试在 perl 中运行后台进程 我创建了一个子进程 用于调用另一个 perl 脚本 我想与这个子进程并行运行几行代码 子进程完成后 我想打印一行代码 主要脚本 usr bin perl 1 print before the chil
  • kernel32.dll Sleep 和 Thread.Sleep() 之间有什么区别

    以下内容之间是否有任何区别 性能 实现等 i DllImport kernel32 dll public extern static void Sleep uint msec 然后调用睡眠函数 ii Thread Sleep 实际上有很大的
  • 如何在网络驱动程序中检查页面是否已完全加载?

    我正在编写一些 Java Webdriver 代码来自动化我的应用程序 如何正确判断页面是否已加载 该应用程序也有一些 Ajax 调用 我已经声明了对 WebDriver 的隐式等待 硒会为你做到这一点 或者至少它尽力了 有时它会达不到要求
  • 如何在 iPhone 上的锁定模式下播放声音

    每个人都知道在用户按下锁定按钮 无声 后保持应用程序运行的标准程序 如果我用 AVAudioPlayer 启动声音 在 iPhone 锁定之前 声音会一直播放到结束 锁定后 该应用程序仍在运行 如果我在 iPhone 锁定时尝试启动另一个声
  • 如何冻结一个线程并从另一个线程通知它?

    我需要暂停 Rust 中的当前线程并从另一个线程通知它 在Java中我会写 synchronized myThread myThread wait 并从第二个线程 恢复主线程 synchronized myThread myThread n
  • 当鼠标悬停在一个列表元素上时,jQuery 使其他列表元素淡入淡出/变暗,我在那里 90%..?

    我有一个无序列表 其中可能有 30 项 当将鼠标悬停在其中一项上时 其余列表项会淡出至 30 而悬停的项目将保持 100 当你离开列表时 它们都会恢复到 100 我已经做到了 当您从一个项目移动到另一个项目时 我的问题就出现了 其他列表项目
  • 检查线程状态,同时使其处于等待状态

    我想知道是否可以检查线程的状态 该线程可能处于可等待状态 但不一定如此 如果它处于可等待状态 我想将其保留在该状态 基本上 如何在不更改线程 可等待 状态的情况下检查线程的状态 通过等待 我的意思是如果我调用 wait pid 它会正确返回
  • windows关闭tomcat后保持端口锁定

    我遇到了一个问题 该问题发生在不同站点的 3 台不同服务器上 问题是 当我关闭 Windows 服务器上的 Tomcat 7 和 8 5 版本 服务并尝试重新启动该服务后 该服务将无法启动 因为 tomcat 认为端口仍在使用中 以下是错误

随机推荐

  • select函数实现tcp服务器与客户端随时收发

    服务器 include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt arpa inet h gt include lt neti
  • STM32F10X库函数逻辑

    define PERIPH BASE unsigned int 0x40000000 定义外围总线基地址 define APB1PERIPH BASE PERIPH BASE xff09 APB1总线开始与外围总线基地址 define AP
  • STM32F10x外部中断EXTI

    目录 一 EXTI是什么 xff1f 二 使用方法 1 功能框图及寄存器 2 库函数编程 总结 提示 xff1a 以下是本篇文章正文内容 xff0c 下面案例可供参考 一 EXTI是什么 xff1f EXTI External interr
  • QT + OpenGL + FFmpeg写的一个全景视频播放器

    临时被分配了一个任务 写一个C 43 43 版本的全景视频播放器 网上搜了搜 基于前辈的基础上 写的差不多了 测试视频源是用ffmpeg拉RTSP的流 最终是要嵌入到别的一个视频播放器模块 所以解码这块我不用太关注 只要实现渲染就可以了 效
  • 15 侥幸:在随机性面前处变不惊

    引言 之前讲过的量化思维 xff0c 已经有概率思维的影子了 xff0c 开始学着用数字提高认识世界的分辨率 现在将继续加深对概率的理解 xff0c 来探讨随机性 它解决的人生难题是 xff1a 我们时常因为心存侥幸而失败 在随机的世界里
  • 【无人驾驶】自动驾驶领域有哪些岗位可选?

    导读 想要进入自动驾驶这个领域 xff0c 便首先去调查了下这个领域的岗位 xff0c 希冀能从中找出自己最感兴趣且匹配度也比较高的方向 废话不多说 xff0c 见下 下图为自动驾驶方向的所有岗位 xff0c 总量的来说 xff0c 方向可
  • 01_搭建百度apollo环境实操可用

    搭建百度apollo环境 0 前言1 目标2 方法3 Apollo环境搭建3 1 CPU版3 1 1前置依赖硬件条件3 2 GPU版前置依赖软件1 安装 Ubuntu 18 042 安装 GIT3 安装 Docker 引擎 3 1 3克隆
  • 02_两小时了解自动驾驶

    02 两小时了解自动驾驶 目标你将学到什么什么是无人驾驶无人驾驶的运作方式参考车辆与硬件平台开源软件架构仿真环境地图简介高精地图与传统地图地图与定位 感知 规划的关系高精地图定位简介GNSS RTK惯性导航激光雷达定位视觉定位融合定位感知简
  • PCA9555的使用个人总结

    1 德州仪器PCA9555 简化PCB布线 xff0c 对处理器有限的IO口进行补充 2 带中断 xff0c 不带重启 3 24 引脚的CMOS器件 xff0c 提供I2C SMBus16位通用并行 xff08 GPIO xff09 的扩展
  • stm32掉电前的数据存储到flash

    对FLASH 的操作 FLASh 必须是先擦 后 写 下面的函数是分析案例 void FLASH WriteByte u32 addr u16 flashdata1 FLASH Status FLASHstatus 61 FLASH COM
  • SPI对外部w25Q64的读写

    SPI 1 SPI是串行外围设备接口 SPI的接口主要应用在EEPROM xff0c FLASH xff0c 实时时钟 xff0c AD 转换器 xff0c 还有数字信号处理器和数字信号 解码器之间 2 SPI xff0c 是一种高速的 x
  • Qt实战开发-仪表盘制作

    仪表盘制作 相关的基础知识 QPainter用来执行具体的绘图相关的操作 xff0c 用来画点 xff0c 线 xff0c 填充 xff0c 变换 xff0c alpha 阿尔法通道 xff08 透明度 xff09 Appha的值越大 xf
  • Qt实战开发-数字软键盘

    开发的思路 布局键盘界面每一个button对应一个槽函数把输入的字符返回到点击处的文本编辑框 开发过程首先定义功能button xff0c 在头文件中定义 QString getText QPushButton span class hlj
  • Qt图形视图框架封装-拿来就用

    简述 图形视图 xff08 Graphics View xff09 提供了一个平台 xff0c 用于大量自定义2D图元的管理与交互 xff0c 并提供了一个视图部件 xff08 view widget xff09 来显示可以缩放和旋转的图元
  • 带参数的宏定义

    带参数的宏定义的一般形式如下 xff1a define lt 宏名 gt xff08 lt 参数表 gt xff09 lt 宏体 gt 其中 xff0c lt 宏名 gt 是一个标识符 xff0c lt 参数表 gt 中的参数可以是一个 x
  • QT 视图(View)/委托(Delegate)/ 模型(Model)/项(Item) 之间的关系

    引言 在学习Qt 中此部分的使用是界面自定义出美观的重要部分 xff0c 熟练的使用 xff0c 可以制作出很好的效果 xff0c 在此梳理一下他们的关系 Model View xff08 模型 视图 xff09 视图 xff08 View
  • char(数字) 转换 int

    刷题遇到一个考点是 char型数字 转 int 进行计算的问题 一看就会 xff0c 一做就错 xff0c 显然是在这里的认识薄弱了 将一番搜索的结果记录下来 xff0c 以备再忘来打脸 char的定义参考 xff1a Java基本数据类型
  • ROS的ros_canopen调试(1)

    Ros canopen是ros支持can通信的package 链接 xff1a http wiki ros org ros canopen distro 61 indigo Ros canopen包结构如下 SocketCAN 是一组开源的
  • linux gcc编译错误:undefined reference to `aio_error‘解决方法

    include lt aio h gt void aiow completion handler sigval t sigval int ret struct aiocb req req 61 struct aiocb sigval siv
  • wait_event_interruptible_locked的使用方法

    wait event interruptible locked interface New wait event interruptible exclusive locked irq macros added They work just