Linux kernel 关于wait\u event\u interruptable()的用法-是否可以忽略唤醒条件?

Linux kernel 关于wait\u event\u interruptable()的用法-是否可以忽略唤醒条件?,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,看看下面的代码框架(我修改了LDD3代码) 我有一个关于这个进程(比如进程1)使用wait\u event\u interruptable()的问题。如果: wake_up_interruptible(&SLEEP_QUEUE); 来自另一个进程(比如进程2)的调用,它告诉内核唤醒这个进程,这个进程发生在进程1中的up()和wait\u event\u interruptable()调用之间?难道永远不会处理1个睡眠吗 我对这个问题的最初回答是wait_event_interrupta

看看下面的代码框架(我修改了LDD3代码)

我有一个关于这个进程(比如进程1)使用wait\u event\u interruptable()的问题。如果:

wake_up_interruptible(&SLEEP_QUEUE);
来自另一个进程(比如进程2)的调用,它告诉内核唤醒这个进程,这个进程发生在进程1中的up()和wait\u event\u interruptable()调用之间?难道永远不会处理1个睡眠吗


我对这个问题的最初回答是wait_event_interruptable()会在睡觉前检查条件COND_DATA_是否存在。好的,现在如果进程2的唤醒可中断()发生在检查COND_DATA_是否存在和进程1在进程1中睡眠内部唤醒可中断()之间呢?

下面的书中有
高级睡眠
部分。如果您阅读它,您会发现在
prepate\u wait()
macro调用后检查了该条件,该宏调用将进程的状态设置为
TASK\u INTERRUPTIBLE
。在此宏之后执行的任何
wake\u up
调用都会将进程的状态设置为
TASK\u RUNNING
<为处于运行状态的进程调用的代码>调度()不会执行任何操作(不会将进程置于睡眠状态)。
wake_up_interruptible(&SLEEP_QUEUE);