linux驱动中的等待队列头

来源:互联网 发布:linux内核开发流程 编辑:程序博客网 时间:2024/05/01 05:01
    在有的时候,驱动程序需要(缺省地)阻塞进程,使它进入等
待(睡眠)状态,直到请求可以得到满足。


内核等待队列
(1)定义等待队列
      wait_queue_head_t my_queue
(2)初始化等待队列
     init_waitqueue_head(&my_queue)
(3)定义和初始化等待队列
    DECLARE_WAIT_QUEUE_HEAD(my_queue);
(4)进入等待队列、睡眠
    <1>wait_event(queue, condition)
     当condition(布尔表达式)为真时,立即返回;否则让进程进入
TASK_UNINTERRUPTIBLE模式的睡眠,并挂在queue参数所指定的
等待队列上。
    <2>wait_event_interruptible(queue, condition)
     当condition(布尔表达式)为真时,立即返回;否则让进程进入
TASK_INTERRUPTIBLE的睡眠,并挂在queue参数所指定的等待队
列上。
    <3>int wait_event_killable(queue, condition)
     当condition(布尔表达式)为真时,立即返回;否则让进程进入
TASK_KILLABLE的睡眠,并挂在queue参数所指定的等待队
列上。
(5)从等待队列中唤醒进程
    <1>wake_up(wait_queue_t *q)
     从等待队列q中唤醒状态TASK_UNINTERRUPTIBLE,TASK_INTERRUPTIBLE,
TASK_KILLABLE的所有进程。
  <2>wake_up_interruptible(wait_queue_t *q);
     从等待队列q中唤醒状态TASK_INTERRUPTIBLE,的所有进程。













0 0
原创粉丝点击