epoll线程安全吗?

ato*_*omd 32 c sockets multithreading network-programming epoll

epoll有两个功能:

  1. epoll_ctl
  2. epoll_wait

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

cme*_*erw 22

它是线程安全的,但没有明确规定,很多文件-见http://linux.derkeiler.com/Mailing-Lists/Kernel/2006-03/msg00084.html

顺便说一句,你也可以让多个线程等待一个epoll_fd,但在这种情况下它可能会有点棘手(即你可能想要使用边缘触发(EPOLLET)或单触发模式(EPOLLONESHOT) - 参见http:// linux .die.net/man/2/epoll_ctl)


VL-*_*-80 5

注意:现有接受的答案是正确的,但它提到“没有太多文档明确说明这一点”,而 epoll 文档确实说明了这一点。

手册明确epoll_wait允许在另一个线程中等待时将文件描述符添加到 epoll 集:

“注释”部分:

当一个线程在调用epoll_wait()时被阻塞时,另一个线程可能会向等待的epoll实例添加文件描述符 。如果新的文件描述符准备好,它将导致 epoll_wait()调用解除阻塞。