2014-09-13 1 views
3

J'ai plusieurs threads, l'un d'eux appelle epoll_wait dans une boucle, d'autres peuvent ouvrir des connexions qui doivent être epoll 'ed par le premier thread. Est-il possible de simplement ajouter de nouvelles sockets avec epoll_ctl alors qu'un autre thread attend dans epoll_wait?Puis-je ajouter un socket à un descripteur epoll alors qu'un autre thread attend ce descripteur epoll?

Qu'est-ce qui se passera dans le scénario suivant:

  1. Discussion 1 appels epoll_wait.
  2. Le thread 2 crée un socket (A) et l'ajoute à l'instance epoll en utilisant epoll_ctl.
  3. Quelqu'un envoie des données, le socket A est prêt pour l'appel read().

Est-ce que epoll_wait retournera le socket A?

Répondre

4

Oui, ce sera le cas. Le point entier d'un socket epoll est que vous n'avez pas à dupliquer l'effort. Aucun instantané ou utilisation de plusieurs files d'attente d'attente n'est impliqué.

Sous le capot, la socket epoll possède sa propre file d'attente. Lorsque vous bloquez sur le socket epoll, vous êtes ajouté à cette seule file d'attente. Aucun état n'est enregistré ou quelque chose comme ça. L'état est dans le socket epoll lui-même.

Questions connexes