- 论坛徽章:
- 0
|
本帖最后由 bdggch 于 2011-05-17 10:14 编辑
关于休眠和唤醒还是不清楚,看如下代码:
读函数部分
....省略的代码
① 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”这个条件,直接跳到后一句执行语句。 |
|