我有一个使用epoll(7)的多线程Linux程序。 epoll(7)手册上说,当其fds之一关闭时,此fd将自动从epoll集合中删除。 我的问题是,如果在一个线程中关闭了epoll集合中的一个fd,而另一个线程正在不同步地同时轮询epoll集合,那么程序会被破坏还是内核会自动同步此访问?
谢谢
Feng
我有一个使用epoll(7)的多线程Linux程序。 epoll(7)手册上说,当其fds之一关闭时,此fd将自动从epoll集合中删除。 我的问题是,如果在一个线程中关闭了epoll集合中的一个fd,而另一个线程正在不同步地同时轮询epoll集合,那么程序会被破坏还是内核会自动同步此访问?
谢谢
Feng
epoll集合中的fds由内核维护,因此您是安全的 - 内核处理任何必要的同步。
尽管如此,仍然存在这样一种可能性:在关闭fd之前,另一个线程上的事件会到达fd。因此,可能会有来自不再出现在集合中的fd的事件。通过精心设计的程序,这不应该成为问题。