我希望C程序在一组文件描述符上阻塞,直到所有文件都准备就绪。这与传统的select(),poll()和epoll()系统调用不同,它们仅在任何文件描述符准备好之前阻塞。是否有标准函数将阻塞,直到所有文件都准备好?或许还有一些其他聪明的技巧?
显然,我可以在循环中调用select()直到所有文件描述符都准备就绪,但我不想承担上下文切换,抢占,迁移等的开销。我宁愿选择( )'任务只是睡眠,直到所有文件都准备好。
答案 0 :(得分:1)
如果有其他线程同时在某些相同的文件描述符上运行,那么它不是线程安全的(但你可能不应该这样做)但你可以试试这个:
poll()
用于当前的文件描述符集poll()
返回时,扫描revents
并找到所有准备好的文件描述符。从民意调查集中删除它们。poll
最后一次使用完整的文件描述符集,以确保它们都已准备就绪。它仍然可能涉及许多poll()
次呼叫,但至少它不会忙碌等待。我不认为存在更有效的方式。