epoll有两个功能:
当我使用相同的epoll_fd时,它们是线程安全的吗?
如果一个线程调用epoll_wait而其他线程同时调用epoll_ctl会发生什么?
答案 0 :(得分:22)
它是线程安全的,但没有太多文档明确说明 - 请参阅http://linux.derkeiler.com/Mailing-Lists/Kernel/2006-03/msg00084.html
顺便说一下,你也可以在一个epoll_fd上等待多个线程,但在这种情况下它可能会有点棘手(即你可能想要使用边缘触发(EPOLLET)或单触发模式(EPOLLONESHOT) - 请参阅{{ 3}})答案 1 :(得分:0)
注意:,现有接受的answer是正确的,但它提到“ 没有太多明确说明该问题的文档”,而epoll文档会对此进行说明。
epoll_wait
的{{3}}明确允许在另一个线程中等待它时,将文件描述符添加到epoll集:
“注释”部分:
在对 epoll_wait()的调用中一个线程被阻塞时,有可能 让另一个线程将文件描述符添加到等待的 epoll 实例。如果新文件描述符准备就绪,将导致 epoll_wait()呼叫以解除阻止。