高级字符设备驱动-内核等待队列笔记

 

等待队列

在Linux驱动程序设计中,可以使用等待队列来实现进程的阻塞,等待队列可以看作

进程的容器,在进程时,将进程放入等待队列,当唤醒进程时,从等待队列中取出进程。

第一种方法

1定义等待队列

Wait_queue_head_t my_queue

2初始化等待队列

Init_waitqueue_head(&my_queue)

第二种方法

定义并初始化等待队列

宏:DECLARE_WAIT_QUEUE_HEAD(my_queue)

3)有条件睡眠

 

Wait_event(queue,condition)

condition(一个布尔表达式)为真时,立即返回;

否则为假时让进程进入TASK_UNINTERRUPTIBLE模式的睡眠(不可中断)

并挂在queue参数所制定的等待队列上。

 

Wait_event_interruptible(queue,condition)

condition(一个布尔表达式)为真时,立即返回;

否则为假时让进程进入TASK_INTERRUPTIBLE模式的睡眠,

并挂在queue参数所制定的等待队列上。

 

Int wait_event_killable(wait_queue_t queue,condition)

condition(一个布尔表达式)为真时,立即返回;

否则为假时让进程进入TASK_KILLABLE模式的睡眠,

并挂在queue参数所制定的等待队列上。

 

4)无条件睡眠(老版本,建议不再使用)

Sleep_on(wait_queue_head_t *q)  不可中断睡眠

Interruptible_sleep_on(wait_queue_head_t *q) 可终端睡眠

 

5)从等待队列中唤醒进程

Wake_up(wait_queue_t *q)  唤醒所有进程

Wake_up_interruptible(wait_queue_t *q) 唤醒TASK_INTERRUPTIBLE的进程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值