我是epoll的linux服务器编程新手。 我有2个线程:Thread_Accept和Thread_epoll。前者是块接受循环,如果新连接即将到来,它将使用epoll_ctl()添加新的fd。后者是一个很大的epoll_wait()循环。
现在我的问题是:如果Thread_Accept在Thread_epoll处于epoll_wait中间时执行epoll_ctl(),该怎么办?会有副作用吗?
提前致谢。
的问候, 马丁
答案 0 :(得分:5)
来自epoll_wait手册页:
当一个线程在调用epoll_pwait()时被阻塞时,另一个线程可能会将文件描述符添加到等待的epoll实例中。如果新文件描述符准备就绪,则会导致epoll_wait()调用解除阻塞。
因此,添加新文件描述符时没有副作用: - )
(本手册页注释是nathansizemore提到的bug的结果)
答案 1 :(得分:0)
为什么不把它作为一个线程?
您可以将侦听器套接字设置为非阻塞,并将套接字添加到您的大epoll_wait
答案 2 :(得分:0)