我正在使用设备驱动程序,在这里我需要使用睡眠。我正在使用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);
最佳答案
假设您进入休眠状态的进程是Process1。条件变为真(1)之后,其他一些进程/线程需要在Process1正在等待的等待队列(wake_up
)上调用my_queue
。
然后,已进入睡眠状态的Process1将唤醒。唤醒后,应在wait_event_interruptible()
调用后立即检查两种情况:
您正在等待的情况是否发生了?
或者,是否有信号唤醒Process1?
检测出其中哪些情况(如果不是同时发生),并对其进行适当的处理。