在一个线程中执行epoll_ctl而另一个线程在epoll_wait的中间

时间:2011-07-27 15:46:10

标签: multithreading epoll

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

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

提前致谢。

的问候, 马丁

3 个答案:

答案 0 :(得分:5)

来自epoll_wait手册页:

  

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

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

(本手册页注释是nathansizemore提到的bug的结果)

答案 1 :(得分:0)

为什么不把它作为一个线程?

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

答案 2 :(得分:0)