多个进程(不是线程)可以在阻塞模式下对设备描述符(例如:/ dev / xyx)进行轮询,并在驱动程序返回POLLIN时被唤醒吗?
详细信息:我有一个驱动程序并支持从驱动程序到用户空间应用程序的异步事件通知,我已在驱动程序中实现了一个轮询功能。我期待多个进程在我的描述符/ dev / xyz上进行轮询,在进行轮询时,立即驱动程序将它们从.poll函数放入等待队列,以便它们阻塞直到驱动程序返回POLLIN。
现在,当一个进程在描述符上被阻塞时,它工作正常,所以当驱动程序执行POLLIN时,poll()解除阻塞并处理它。但是,如果在/ dev / xyz上阻塞了多个进程(通过执行轮询),并且如果驱动程序发送了POLLIN,则只有一个进程解除阻塞而另一个进程仍然被阻塞。
当驱动程序在/ dev / xyz上执行POLLIN时,有没有办法确保在该描述符上阻塞的所有进程都被唤醒? (比如走过等待队列列表或其他东西)??
答案 0 :(得分:0)
您可以尝试使用wake_up_all(wake_up_interruptible_all)替换wake_up(或wake_up_interruptible)。这应该唤醒所有等待过程。