4

我是使用 epoll 进行 linux 服务器编程的新手。我有 2 个线程:Thread_Accept 和 Thread_epoll。前者是块接受循环,如果有新的连接到来,它会用 epoll_ctl() 添加新的 fd。后者是一个大的 epoll_wait() 循环。

现在我的问题是:如果 Thread_Accept 执行 epoll_ctl() 而 Thread_epoll 处于 epoll_wait 中间怎么办?会不会有什么副作用?

提前致谢。

问候,马丁

4

3 回答 3

7

从 epoll_wait 手册页:

当一个线程在对 epoll_pwait() 的调用中被阻塞时,另一个线程可以将文件描述符添加到等待的 epoll 实例中。如果新的文件描述符准备就绪,它将导致 epoll_wait() 调用解除阻塞。

因此,添加新文件描述符时没有副作用 :-)

(此手册页注释是 nathansizemore 提到的错误的结果)

于 2016-10-11T14:00:58.777 回答
0

你为什么不让它成为一个线程?

您可以将侦听器套接字设置为非阻塞并将套接字添加到您的大 epoll_wait

于 2011-08-09T02:37:54.920 回答
0

根据我的经验,是的。但是,这另有说明

于 2015-11-24T05:29:38.393 回答