atomd
atomd

Reputation: 558

Is epoll thread-safe?

There are two functions in epoll:

  1. epoll_ctl
  2. epoll_wait

Are they thread-safe when I use the same epoll_fd?
What will happen if one thread calls epoll_wait and others call epoll_ctl at the same time?

Upvotes: 38

Views: 16555

Answers (2)

VL-80
VL-80

Reputation: 614

Yes, it is thread-safe according to the manual page for epoll_wait. It explicitly allows adding a file descriptor to an epoll set while it is being waited for in another thread:

Section "Notes":

While one thread is blocked in a call to epoll_wait(), it is possible for another thread to add a file descriptor to the waited-upon epoll instance. If the new file descriptor becomes ready, it will cause the epoll_wait() call to unblock.

Upvotes: 6

cmeerw
cmeerw

Reputation: 7346

It is thread-safe, but there isn't much documentation that explicitly states that. See here

BTW, you can also have multiple threads waiting on a single epoll_fd, but in that case it can get a bit tricky. (I.e. you might want to use edge-triggered EPOLLET or oneshot mode EPOLLONESHOT. See here.)

Upvotes: 26

Related Questions