epoll 线程安全吗?

问题描述 投票:0回答:2

epoll中有两个函数:

  1. epoll_ctl
  2. epoll_wait

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

c multithreading sockets network-programming epoll
2个回答
26
投票
它是线程安全的,但没有太多文档明确说明这一点。请参阅

此处

顺便说一句,您也可以让多个线程等待单个

epoll_fd

,但在这种情况下,它可能会变得有点棘手。 (也就是说,您可能想使用边缘触发 
EPOLLET
 或单次模式 
EPOLLONESHOT
。请参阅
此处。)


5
投票
是的,根据

epoll_wait手册页

,它是线程安全的。它明确允许在另一个线程中等待时将文件描述符添加到 epoll 集:

“注释”部分:

当一个线程在调用

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

© www.soinside.com 2019 - 2024. All rights reserved.