epoll线程安全吗?

时间:2011-08-14 18:17:24

标签: c multithreading sockets network-programming epoll

epoll有两个功能:

  1. epoll_ctl
  2. epoll_wait
  3. 当我使用相同的epoll_fd时,它们是线程安全的吗?
    如果一个线程调用epoll_wait而其他线程同时调用epoll_ctl会发生什么?

2 个答案:

答案 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()呼叫以解除阻止。