在不同线程中的多个 epoll 事件循环中使用一个服务器 fd 是否安全?

在不同线程中的多个 epoll 事件循环中使用一个服务器 fd 是否安全?

我有一个服务器 fd,以及多个线程,每个线程中都有 epoll 事件循环(不同的 epoll_fd)。如果我将此 fd 添加到每个事件循环中,是否安全?如果有新客户端出现,是否只有其中一个会收到通知?

答案1

如果我将此 fd 添加到每个事件循环中,是否安全?

它是安全的,因为它epoll不会崩溃,也不会报错。您的代码是否可以正确处理它尚不得而知。

如果有新客户出现,是否确实只有其中一个会收到通知?

我不会指望这一点。更可能的是,所有线程都收到通知,但只有一个线程能够处理该事件 - 其他线程可能只是阻塞accept(除非套接字设置为非阻塞)。

相关内容