struct __wait_queue_head {
spinlock_t lock;
struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;
struct list_head {
struct list_head *next, *prev;
};
wait_queue_head_t wait_queue; /*定义等待队列变量*/
init_waitqueue_head (&wait_queue); /*初始化等待丢列*/
DECLARE_WAIT_QUEUE_HEAD(wait_queue);
DECLARE_WAIT_QUEUE_HEAD(ReadWaitQueue);
DECLARE_WAIT_QUEUE_HEAD(WriteWaitQueue);
DECLARE_WAIT_QUEUE_HEAD(WaitQueue_Read); /*定义等待队列变量*/
.....
interruptible_sleep_on(&WaitQueue_Read);
wake_up_interruptible(&WaitQueue_Read);
if (IsWait()) {
if (!(filp->f_flags & O_NONBLOCK)) {
interruptible_sleep_on(&WaitQueue);
} else {
return (-EAGAIN);
}
}
interruptible_sleep_on_timeout (&WaitQueue, 10);
wait_event_interruptible(wq, condition);
#define wait_event_timeout(wq, condition, timeout) \\
({ \\
long __ret = timeout; \\
if (!(condition)) \\
__wait_event_timeout(wq, condition, __ret); \\
__ret; \\
})
DECLARE_WAIT_QUEUE_HEAD(WaitQueue_Read);
... ...
wait_event_interruptible(WaitQueue_Read, count>30);
wait_event_interruptible_timeout(wq, condition, timeout);
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |