2011-07-27 145 views
2

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

现在我的问题是:如果当Thread_Acepts执行epoll_ctl()而Thread_epoll处于epoll_wait中间时呢?会有副作用吗?

在此先感谢。

问候, 马丁

回答

1

从epoll_wait手册页:

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

所以,:-)

添加一个新的文件描述符时无副作用(本手册页笔记是nathansizemore提到的错误的结果)

0

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

您可以设置监听套接字非阻塞和插座添加到您的大epoll_wait

+0

伊万,我知道了。但不是它分裂为两个线程会获得更好的表现吗?只是我的想法。 –

+0

关于获得更好的表现,我不确定。在这种情况下,您需要通过锁定来保护每个epoll_ctl。恕我直言,它只会增加您的代码的复杂性 –

0
+0

您在“这说不然”中指出的链接实际上与您一致。您可以在线程1中调用epoll_ctl(),而线程2是epoll_wait()ing,并且在epoll_ctl()ed的fd可用时它会正常唤醒。 –

+0

@DannyDulai我说“它会产生副作用”(根据我的经验),但“这说其他”链接指出它不会。 – nathansizemore

相关问题