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

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

我正在开发一个设备驱动程序,我需要在其中使用 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/

相关文章:

c - 当 x 接近某个值时的 If 语句

c - nf_conntrack_helper 注册未注册端口返回错误

c - 如何在没有未对齐模式的情况下访问压缩结构中的变量?

memory-management - 了解 64 位 Linux 上的 kmap

linux - 使内核头文件对用户空间可用

linux - 从等待队列过渡到运行队列

linux - 如何使用 Babeltrace-log

linux-kernel - 在 kretprobe 处理程序中获取函数的返回值

c - DevC++ 中的 Allegro 错误

c++ - 什么是数组到指针衰减?