主题 : 休眠函数wait_event_interruptible()被唤醒问题? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 38526
精华: 0
发帖: 14
金钱: 70 两
威望: 14 点
综合积分: 28 分
注册时间: 2011-02-26
最后登录: 2014-10-05
楼主  发表于: 2011-06-12 14:53

 休眠函数wait_event_interruptible()被唤醒问题?

关于休眠和唤醒还是不清楚,看如下代码:  
读函数部分  
....省略的代码  
① while (!have_data)  
{  
if (filp->f_flags&0_NONBLOCK)  
return -EAGAIN;  

wait_event_interruptible(dev->inq,have_data);  

}  
.....省略的代码  

写函数部分  
.....省略的代码  
② have_data=true;  
wake_up(&(dev->inq));  

我的疑惑: 感觉这个while()循环多余,没啥用啊!?  
关键点: 休眠函数wait_event_interruptible()被唤醒后,不管是被其它无关的中断唤醒,还是被wake_up()唤醒,wait_event_interruptible()的执行情况是哪种?  
1. 被唤醒后,wait_event_interruptible()宏,自身再检查“have_data”这个条件以决定是返回还是继续休眠。  
2. 被唤醒后,wait_event_interruptible()宏,自身不检查“have_data”这个条件,直接跳到后一句执行语句。  

恳请高手详细解说一下吧。