linux中多线程epoll的问题

时间:2011-05-17 02:52:07

标签: linux multithreading epoll

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

由于

1 个答案:

答案 0 :(得分:7)

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

也就是说,在fd关闭之前,fd上的事件仍有可能进入另一个线程。因此,有可能从fd中获得一个不再出现在集合中的事件。通过精心设计的程序,这不应该导致问题。