内核等待队列

在linux驱动程序设计中,可以使用等待队列来实现进程的阻塞,等待队列可以看做保存进程的容器,在阻塞进程时,将进程放入等待队列,当唤醒进程时,从等待队列中取出进程。

linux2.6内核提供了以下关于等待队列的操作

1定义等待队列

wait_queue_head_t my_queue

2初始化等待队列

init_waitqueue_head(&my_queue)

3定义并初始化等待队列

DECLARE_WAIT_QUEUE_HEAD(my_queue)

4有条件睡眠

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)

当条件为真时,立即返回,否则让进程进入TASK_KILLABLE的睡眠,并挂在queue参数所指定的等待队列上。

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

sleep_on(wait_queue_head_t *q)

让进程进入不可中断的睡眠,并把它放入等待队列q

interruptible_sleep_on(wait_queue_head_t *q)

让进程进入可中断的睡眠,并把它放入等待队列q。

6--从等待队列中唤醒进程

wake_up(wait_queue_t *q)

从等待队列中唤醒状态为TASK_UNINTERRUPTIBLE,TASK_INTERRUPTIBLE,TASK_KILLABLE的所有进程。


wake_up_interruptible(wait_queue_t *q)

从等待队列中唤醒状态为TASK_INTERRUPTIBLE的进程。


你可能感兴趣的:(内核等待队列)