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

Mar*_* Ng 4 multithreading epoll

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

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

提前致谢.

问候,马丁

ale*_*cks 5

从epoll_wait手册页:

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

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

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