06 休眠唤醒
编程指南
需要定义一个等待队列(DECLARE_WAITQ_UEUE_HEAD)
将wait_event线程放入queue
1.休眠唤醒
1.1 休眠函数
文件路径include\linux\wait.h
函数 | 说明 |
---|---|
wait_event_interrupt(wq, condition) | 休眠一直到condition为真才退出 休眠期间可以被signal打断 |
wait_event(wq, condition) | 休眠一直到condition为真才退出 |
wait_event_interrupt_timeout(wq, condition, timeout) | 休眠一直到condition为真或者超时才退出 休眠期间可以被signal打断 |
wait_event_timeout(wq, condition, timeout) | 休眠一直到condition为真或者超时才退出 |
-
wq:等待队列。
休眠时将程序修改为非running状态,并将其放入wq队列。唤醒时从wq队列中唤醒
-
condition
唤醒event的的一个实现标志,为真表示唤醒休眠队列
1.2 唤醒函数
函数 | 说明 |
---|---|
wake_up_interruptible(x) | 唤醒x休眠队列中一个状态为TASK_INTERRUPTIBLE的线程 |
wake_up_interruptible_nr(x, nr) | 唤醒x休眠队列中nr个状态为TASK_INTERRUPTIBLE的线程 |
wake_up_interruptible(x) | 唤醒x队列中所有状态为TASK_INTERRUPTIBLE的线程 |
wake_up(x) | 唤醒x队列中的一个线程 |
wake_up_nr(x) | 唤醒x队列中的nr个线程 |
wake_up_nr_all(x) | 唤醒x队列中的所有线程 |
1.3 休眠与唤醒的关系
需要注意的是wait_event事件并不是调用wake_up后就能唤醒对应的事件。
wait_event事件的唤醒条件为已下条件共同触发
-
condition为真
-
wake_up事件触发
-
timeout(可选)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2022-03-05 18 iptables
2020-03-05 C语言的一些易混知识点