linux内核里的等待队列机制在做驱动开发时用的非常多,多用来实现阻塞式访问,下面简单总结了等待队列的四种用法,希望对读者有所帮助。
1. 睡眠等待某个条件发生(条件为假时睡眠):
睡眠方式:wait_event, wait_event_interruptible
唤醒方式:wake_up (唤醒时要检测条件是否为真,如果还为假则继续睡眠,唤醒前一定要把条件变为真)
2. 手工休眠方式一:
1)建立并初始化一个等待队列项
define_wait(my_wait) 《==》 wait_queue_t my_wait; init_wait(&my_wait);
2)将等待队列项添加到等待队列头中,并设置进程的状态
prepare_to_wait(wait_queue_head_t *queue, wait_queue_t *wait, int state)
3)调用schedule(),告诉内核调度别的进程运行
4)schedule返回,完成后续清理工作
finish_wait()
3. 手工休眠方式二:
1)建立并初始化一个等待队列项:
define_wait(my_wait) 《==》 wait_queue_t my_wait; init_wait(&my_wait);
2)将等待队列项添加到等待队列头中:
add_wait_queue
3)设置进程状态
__set_current_status(task_interruptible);
4)schedule()
5)将等待队列项从等待队列中移除
remove_wait_queue()
其实,这种休眠方式相当于把手工休眠方式一中的第二步prepare_to_wait拆成两步做了,即prepare_to_wait 《====》add_wait_queue + __set_current_status,其他都是一样的。
4. 老版本的睡眠函数sleep_on(wait_queue_head_t *queue):
将当前进程无条件休眠在给定的等待队列上,极不赞成使用这个函数,因为它对竞态没有任何保护机制。
三大运营商开始低调默契的停售旗下的低价4G套餐
智能座舱交互体验持续升级,传感器件功不可没
单运放双滞后转换特性实现
松下为自动驾驶车开发“夜视眼”
可控硅/晶闸管的应用:滑差电机
干货:Linux内核中等待队列的四个用法
英伟达新发GH200对PCB的影响如何?
采用功率放大器构造完整ECPST系统电路实验平台
2012国际表计大会:世强电讯水、电、气表解决方案受青睐
永磁电机省电吗_永磁电机省电的原因是什么
嵌入式技术推动新兴领域创新发展
实现高降压比转换器多种解决方案分析
电炒锅常见故障修理
华大半导体旗下晶门科技收购Microchip触控技术
轻轻松松地在线上计算nRF9160的电流功耗
AMD CEO苏姿丰博士亲自发布了新一代锐龙5000U系列
贸泽电子2022年新增超55家供应商 进一步扩大产品分销阵容
专业PCB软件中一致界面的优点
蓝牙耳机戴久了耳朵疼、推荐几款佩戴舒适的蓝牙耳机
印度批准塔塔建设ATMP工厂