我正在设备驱动程序,我需要使用睡眠。我正在使用wait_event_interruptible()
进行睡眠。即使条件成立,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);
答案 0 :(得分:1)
假设您进入睡眠状态的进程是Process1。在条件变为真(1)之后,其他一些进程/线程需要在Process1正在等待的等待队列(wake_up
)上调用my_queue
。
然后,已经进入睡眠状态的Process1将被唤醒。唤醒后,您应该在wait_event_interruptible()
电话后立即检查两个案例:
检测出现了哪些情况(如果不是两者),并对它们进行适当的处理。