如何阻止直到所有文件描述符都准备好?是否使用select()/poll()/epoll()?
我想让一个C程序在一组文件描述符上阻塞,直到所有文件都准备好。这与传统的select()、poll()和epoll()系统调用不同,后者只在任何文件描述符准备就绪之前阻塞。是否有一个标准函数将阻止,直到所有文件都准备好?或许还有其他一些聪明的把戏如何阻止直到所有文件描述符都准备好?是否使用select()/poll()/epoll()?,select,file-io,blocking,file-descriptor,epoll,Select,File Io,Blocking,File Descriptor,Epoll,我想让一个C程序在一组文件描述符上阻塞,直到所有文件都准备好。这与传统的select()、poll()和epoll()系统调用不同,后者只在任何文件描述符准备就绪之前阻塞。是否有一个标准函数将阻止,直到所有文件都准备好?或许还有其他一些聪明的把戏 显然,我可以在循环中调用select(),直到所有文件描述符都准备好,但我不想引起上下文切换、抢占、迁移等开销。。我希望select()ing任务在所有文件准备就绪之前一直处于休眠状态。如果有其他线程同时在某些相同的文件描述符上运行(但您可能无论如何都
显然,我可以在循环中调用select(),直到所有文件描述符都准备好,但我不想引起上下文切换、抢占、迁移等开销。。我希望select()ing任务在所有文件准备就绪之前一直处于休眠状态。如果有其他线程同时在某些相同的文件描述符上运行(但您可能无论如何都不应该这样做),则它不是线程安全的,但您可以尝试以下方法:
poll()
用于当前文件描述符集poll()
返回时,扫描revents
并找到所有准备就绪的文件描述符。从轮询集中删除它们poll
使用全套文件描述符进行最后一次轮询,以确保它们仍然准备就绪它仍然可能涉及许多
poll()
调用,但至少它不会忙着等待。我认为没有更有效的方法。如果有其他线程同时在某些相同的文件描述符上运行(但您可能无论如何都不应该这样做),那么它不是线程安全的,但您可以尝试以下方法:
poll()
用于当前文件描述符集poll()
返回时,扫描revents
并找到所有准备就绪的文件描述符。从轮询集中删除它们poll
使用全套文件描述符进行最后一次轮询,以确保它们仍然准备就绪它仍然可能涉及许多
poll()
调用,但至少它不会忙着等待。我认为没有比这更有效的方法了。是的,这就是我所说的循环。我已经研究过扩展Linux内核来做我想做的事情,但这看起来是一项非常艰巨的工作,因为文件编写线程需要做一些工作来确定是否应该唤醒线程。是的,这就是我所说的循环。我已经研究过扩展Linux内核以实现我想要的功能,但这看起来是一项非常艰巨的工作,因为文件编写线程需要做一些工作来确定是否应该唤醒线程。