当另一个线程在这个epoll描述符上等待时,我可以将套接字添加到epoll描述符吗?

时间:2014-09-13 22:10:20

标签: multithreading sockets epoll

我有几个线程,其中一个在循环中调用epoll_wait,其他线程可以打开第一个线程需要epoll的连接。是否可以添加epoll_ctl的新套接字,而另一个线程在epoll_wait中等待?

以下情况会发生什么:

  1. 线程1调用epoll_wait。
  2. 线程2创建套接字(A)并使用epoll_ctl将其添加到epoll实例。
  3. 有人发送了一些数据,套接字A已准备好进行read()调用。
  4. epoll_wait会返回套接字A吗?

1 个答案:

答案 0 :(得分:4)

是的,它会的。 epoll套接字的重点在于您不必重复工作。不涉及快照或使用多个等待队列。

引擎盖下,epoll套接字有自己的等待队列。当您阻止epoll套接字时,您将被添加到该单个等待队列。没有任何国家被保存或类似的东西。状态在epoll套接字本身。