目标:初始化一个摄像头等待队列头cam_wait_queue
实现:static DECLARE_WAIT_QUEUE_HEAD(cam_wait_queue)
使用:wait_event_interruptible(cam_wait_queue,ev_cam);
wait_up_interuptible(&cam_wait_queue);
解释:
include/linux/wait.h
#define DECLARE_WAIT_QUEUE_HEAD(name) \
wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)
初始化队列头name,name结构体:
struct __wait_queue_head {
spinlock_t lock;
struct list_head task_list;
};
对结构体的两个参数初始化:
#define __WAIT_QUEUE_HEAD_INITIALIZER(name) { \
.lock = __SPIN_LOCK_UNLOCKED(name.lock), \
.task_list = { &(name).task_list, &(name).task_list } }
先看第二个参数task_list定义:
struct list_head {
struct