假设我通过调用
创建epoll文件描述符(epfd)epfd = epoll_create( 10 );
接下来,我通过调用epoll_ctl(epfd,EPOLL_CTL_ADD,...)将一些文件描述符添加到此集合中,并通过在单独的线程中调用epoll_wait来等待事件循环中的事件。
当epoll set不为空且epoll_wait(epfd,...)正在进行时,如果我关闭epfd(通过调用close(epfd)在线程中,除了epoll_wait线程之外)会发生什么? epoll_wait终止了吗?结果如何?
答案 0 :(得分:1)
可以预见,Linux与select(2)
的功能相同。从手册页:
有关epoll中文件描述符可能发生的事情的讨论 由
epoll_wait()
监控的实例在另一个线程中关闭, 见select(2)
。
来自select(2)
页面:
如果
select()
监视的文件描述符在另一个文件描述符中被关闭 线程,结果未指定。 [...]在Linux上(以及其他一些 系统),关闭另一个线程中的文件描述符没有任何效果 在select()
tl; dr;是不是这样做的":
总之,依赖于特定行为的任何应用程序 这种情况必须被认为是错误的。