Проблема многопоточности epoll в linux


У меня есть многопоточная программа linux, которая использует epoll (7). На справочной странице epoll(7) написано, что когда один из его FD будет закрыт, этот fd будет автоматически удален из набора epoll. Мой вопрос заключается в том, что если fd набора epoll закрывается в одном потоке, в то время как набор epoll опрашивается в другом потоке одновременно без синхронизации. Будет ли программа повреждена или ядро автоматически синхронизирует этот доступ?

Спасибо

Фэн

1 7

1 ответ:

Fds в наборе epoll поддерживаются ядром, поэтому вы в безопасности - ядро обрабатывает любую необходимую синхронизацию.

Тем не менее, остается возможность, что событие на fd входит в другой поток непосредственно перед закрытием fd. Таким образом, можно было бы получить событие из fd, которое больше не появляется в наборе. С тщательно разработанной программой это не должно вызвать проблем.