即使条件成立,wait_event_interruptible也不会返回

时间:2015-01-22 10:26:37

标签: c linux-kernel kernel linux-device-driver

我正在设备驱动程序,我需要使用睡眠。我正在使用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);

1 个答案:

答案 0 :(得分:1)

假设您进入睡眠状态的进程是Process1。在条件变为真(1)之后,其他一些进程/线程需要在Process1正在等待的等待队列(wake_up)上调用my_queue

然后,已经进入睡眠状态的Process1将被唤醒。唤醒后,您应该在wait_event_interruptible()电话后立即检查两个案例:

  • 你等待的情况发生了吗?
  • OR,发出信号唤醒Process1?

检测出现了哪些情况(如果不是两者),并对它们进行适当的处​​理。