Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File io 在描述符上执行轮询的多个应用程序_File Io_Linux Kernel - Fatal编程技术网

File io 在描述符上执行轮询的多个应用程序

File io 在描述符上执行轮询的多个应用程序,file-io,linux-kernel,File Io,Linux Kernel,多个进程(不是线程)能否在阻塞模式下轮询设备描述符(对于ex:/dev/xyx)并在驱动程序执行返回轮询时被唤醒 详细信息:我有一个驱动程序,为了支持从驱动程序到用户空间应用程序的异步事件通知,我在驱动程序中实现了轮询功能。我希望多个进程在我的描述符/dev/xyz上进行轮询,在进行轮询时,驱动程序会立即将它们从.poll函数放入等待队列,以便它们阻塞,直到驱动程序返回轮询 现在,当一个进程在描述符上被阻塞时,它可以正常工作,因此当驱动程序执行POLLIN时,poll()将取消阻塞,我将对其进行

多个进程(不是线程)能否在阻塞模式下轮询设备描述符(对于ex:/dev/xyx)并在驱动程序执行返回轮询时被唤醒

详细信息:我有一个驱动程序,为了支持从驱动程序到用户空间应用程序的异步事件通知,我在驱动程序中实现了轮询功能。我希望多个进程在我的描述符/dev/xyz上进行轮询,在进行轮询时,驱动程序会立即将它们从.poll函数放入等待队列,以便它们阻塞,直到驱动程序返回轮询

现在,当一个进程在描述符上被阻塞时,它可以正常工作,因此当驱动程序执行POLLIN时,poll()将取消阻塞,我将对其进行处理。但是,如果在/dev/xyz上有多个进程被阻止(通过执行轮询),并且如果驱动程序发送轮询,则只有一个进程被取消阻止,而另一个进程仍然被阻止


当驱动程序在/dev/xyz上执行轮询时,是否有方法确保唤醒该描述符上阻塞的所有进程?(比如浏览等待队列列表之类的)??

你可以尝试用wake_up_all(wake_up_Interruptable_all)替换wake_up(或wake_up_Interruptable)。这将唤醒所有等待的进程。

您可以尝试用唤醒全部(唤醒可中断全部)替换唤醒(或唤醒可中断)。这将唤醒所有等待过程。

您好,感谢您的回复。我尝试唤醒可中断的所有进程,但仍然看到两个被阻止的进程中只有一个正在被解除阻止。我的第二个进程对事件一无所知,它在poll sys调用中一直处于阻塞状态。我正在进程中进行轮询(fd,1,-1)。我已经从驱动程序验证了这两个进程都放在等待队列上(使用printk)。欢迎提出更多建议。谢谢,我可以扔一些“也许”的。可能这两个进程不在同一个等待队列中。也许在醒来之后,Linux再次调用了轮询处理程序,它再次进入睡眠状态。也许你在等待队列和检查是否有数据之间存在竞争条件(但这可以解释一致的行为)。嗨,谢谢你的回答。我尝试唤醒可中断的所有进程,但仍然看到两个被阻止的进程中只有一个正在被解除阻止。我的第二个进程对事件一无所知,它在poll sys调用中一直处于阻塞状态。我正在进程中进行轮询(fd,1,-1)。我已经从驱动程序验证了这两个进程都放在等待队列上(使用printk)。欢迎提出更多建议。谢谢,我可以扔一些“也许”的。可能这两个进程不在同一个等待队列中。也许在醒来之后,Linux再次调用了轮询处理程序,它再次进入睡眠状态。也许在加入等待队列和检查是否有数据之间存在竞争条件(但这可以解释一致的行为)。