7

我有一个使用 epoll(7) 的多线程 linux 程序。epoll(7) 手册页说,当它的一个 fd 被关闭时,这个 fd 将自动从 epoll 集中删除。我的问题是,如果 epoll 集的 fd 在一个线程中关闭,而 epoll 集在另一个线程中同时轮询而没有同步,该怎么办。程序会损坏还是内核会自动同步此访问?

谢谢

4

1 回答 1

7

epoll 集中的 fds 由内核维护,因此您是安全的 - 内核处理任何必要的同步。

也就是说,fd 上的事件仍有可能在 fd 关闭之前进入另一个线程。因此,可能有来自 fd 的事件不再出现在集合中。使用精心设计的程序,这应该不会造成问题。

于 2011-05-17T05:29:10.547 回答