等待队列(WaitQueue)
文章目录
- 等待队列(WaitQueue)
- 1、等待队列介绍
- 2、等待队列初始化
- 2.1 静态初始化
- 2.2 动态初始化
- 3、队列任务排队
- 3.1 wait_event
- 3.2 wait_event_timeout
- 3.3 wait_event_cmd
- 3.4 wait_event_interruptible
- 3.5 wait_event_interruptible_timeout
- 3.6 wait_event_killable
- 4、唤醒队列任务
- 5、驱动代码实现
- 5.1 静态方式
- 5.2 动态方式
本文将详细介绍如果在Linux内核驱动中使用等待队列(WaitQueue)。
1、等待队列介绍
当您编写 Linux 驱动程序或模块或内核程序时,某些进程应该等待或休眠某些事件。 在 Linux 中有几种处理睡眠和唤醒的方法,每种方法适合不同的需要。 等待队列也是处理这种情况的方法之一。
每当进程必须等待事件(例如数据到达或进程终止)时,它就应该进入睡眠状态。 休眠导致进程暂停执行,释放处理器以供其他用途。 一段时间后,进程将被唤醒,并在我们等待的事件到达时继续其工作。
等待队列是内核提供的一种实现等待的机制。 顾名思义,waitqueue 是等待事件的进程列表。 换句话说,等待队列用于等待某个事件在某个条件为真时将其唤醒。 必须小心使用它们以确保没有竞争条件
。
2、等待队列初始化
Wait Queue在linux/wait.h
头文件中定义。初始化等待队列有两种方法:
- 静态初始化
- 动态初始化
2.1 静态初始化
等待队列的静态初始化方法非常简单: