Проблема многопоточности epoll в linux - PullRequest
7 голосов
/ 17 мая 2011

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

Спасибо

Feng

1 Ответ

7 голосов
/ 17 мая 2011

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

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

...