一. 简介
上一篇文章简单介绍了 什么是Linux阻塞与非阻塞IO。文章地址如下:
本文来学习Linux内核提供的唤醒阻塞进程机制:等待队列。
二. Linux 内核唤醒阻塞进程的机制:等待队列
阻塞访问最大的好处就是,当设备文件不可操作的时候进程可以进入休眠状态,这样可以把 CPU资源让出来。但是,当设备文件可用时就必须唤醒进程,一般在中断函数里完成唤醒进程的工作。
Linux内核提供了等待队列(wait queue)来实现阻塞进程的唤醒工作。
下面来学习Linux内核中等待队列涉及的结构体与 API函数。
1. 等待队列头
如果我们要在驱动中使用等待队列,必须创建并初始化一个等待队列头,等待队列头使用结构体
wait_queue_head_t 表示,wait_queue_head_t 结构体定义在文件 include/linux/wait.h 中,结构体内 容如下所示:
struct __wait_queue {
unsigned int flags;
void *private;
wait_queue_func_t func;
struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;