在《内核线程同步之completion》一文中说到completion完成量也是基于wait_queue等待队列机制实现(这些机制不仅仅用于内核线程的同步,也可用于其他相关场景,这里用线程演示是其比较方便感受到效果),那么接下来就来了解下这一机制的相关内容,其在Linux Kernel源码include/linux/wait.h文件中有如下内容:
typedef struct __wait_queue wait_queue_t;
struct __wait_queue {
unsigned int flags;
#define WQ_FLAG_EXCLUSIVE 0x01
void *private;
wait_queue_func_t func;
struct list_head task_list;
};
struct __wait_queue_head {
spinlock_t lock;
struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;
上面包含了等待队列和等待队列头部类型的结构体声明。其对应有如下静态初始化宏: