我正在开发一个设备驱动程序,我需要在其中使用 sleep 。我正在使用 wait_event_interruptible()
来 sleep 。即使条件成立,wait_event_interruptible()
也不会返回。但是当我使用 Ctrl+c 关闭应用程序时,它正在返回。这意味着它已捕获信号。为什么它捕获信号但不进行条件检查?下面是我在驱动程序中使用的代码。
/*Initialization of Wait queue*/
static DECLARE_WAIT_QUEUE_HEAD(my_queue);
/* Here i'm waiting for value at address becomes 1 when hardware writes data */
wait_event_interruptible(my_queue, *addr);
最佳答案
假设您已进入休眠状态的进程是 Process1。条件变为真 (1) 后,其他进程/线程需要对 Process1 正在等待的等待队列 (my_queue
) 调用 wake_up
。
然后,已经进入休眠状态的 Process1 将被唤醒。唤醒后,您应该在 wait_event_interruptible()
调用后立即检查两种情况:
- 您等待的情况发生了吗?
- 或者,是否有信号唤醒 Process1?
检测发生了哪一种情况(如果不是同时发生),并对它们进行适当的处理。
关于c - 即使条件成立,wait_event_interruptible 也不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28086432/