简体   繁体   中英

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?

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. (Ie you might want to use edge-triggered EPOLLET or oneshot mode EPOLLONESHOT . See here .)

Note: The existing accepted answer is correct, but it mentions " there isn't much documentation that explicitly states that ", while epoll documentation does state it.

The manual page for epoll_wait 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM