我有一个使用epoll(7)的多线程linux程序。 epoll(7)手册页说当其中一个fds关闭时,这个fd将自动从epoll集中删除。我的问题是,如果epoll集的fd在一个线程中被关闭,而epoll集在另一个线程中被同时轮询而没有同步。程序会被破坏还是内核会自动同步这个访问?
由于
丰
答案 0 :(得分:7)
epoll集中的fds由内核维护,因此您是安全的 - 内核处理任何必要的同步。
也就是说,在fd关闭之前,fd上的事件仍有可能进入另一个线程。因此,有可能从fd中获得一个不再出现在集合中的事件。通过精心设计的程序,这不应该导致问题。