日期:2014-05-16  浏览次数:20653 次

关于prepare_to_wait的参数
函数原型如下:void prepare_to_wait(wait_queue_head_t *queue, wait_queue_t *wait, int state)
其中queue是等待队列头,wait书上说是"进程入口",但是我并没有看到什么进程,wait的创建及初始化只用了一个宏:
DEFINE_WAIT(wait),请问wait到底是什么,它的作用是什么?谢谢!!

------解决方案--------------------
#define DEFINE_WAIT(name) \
wait_queue_t name = { \
.private = current, \
.func = autoremove_wake_function, \
.task_list = LIST_HEAD_INIT((name).task_list), \
}

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;
};

===========================================================================
wait_queue_t name 
即struct __wait_queue name
name 是你的宏的参数字符串,你自己取名的
来看它的对象
.private = current,//私有void指针表当前正在运行的进程宏
.func = autoremove_wake_function,//函数指针赋值
.task_list = LIST_HEAD_INIT((name).task_list),//就是让列表头指向自己

"请问wait到底是什么"
一个结构对象,一个等到队列头