等待队列头
struct __wait_queue_head
{
spinlock_t lock; //自旋锁用于保护自身资源(task_list链表)不被多个进程同时访问
struct list_head task_list;//双向循环链表通过此字段连接成等待对列链表
};
typedef struct __wait_queue_head wait_queue_head_t;
等待队列项
struct __wait_queue
{
//唤醒进程的方式 其中0是非互斥,WQ_FLAG_EXCLUSIVE(0×01)是互斥
当一个等待队列入口有 WQ_FLAG_EXCLUSEVE 标志置位, 它被添加到等待队列的尾部. 没有这个标志的入口项, 相反, 添加 到开始
当 wake_up 被在一个等待队列上调用, 它在唤醒第一个有 WQ_FLAG_EXCLUSIVE 标志的进程后停止
unsigned int flags;
#define WQ_FLAG_EXCLUSIVE 0x01
//私有指针变量,使用过程中会用来存放task_struct结构体
void *private;
//func是一个函数指针,指向用于唤醒队列中线程的函数。虽然提供了默认的唤醒函数default_wake_function,但也允许 灵活的设置队列的唤醒函数
wait_queue_func_t func;
//链表,