Выполнение epoll_ctl в одном потоке, в то время как другой поток находится в середине epoll_wait - PullRequest
4 голосов
/ 27 июля 2011

Я новичок в программировании на сервере Linux с epoll. У меня есть 2 темы: Thread_Accept и Thread_epoll. Первый - это цикл приема блоков, если будет установлено новое соединение, он добавит новый fd с помощью epoll_ctl (). Последний представляет собой большой цикл epoll_wait ().

Теперь мой вопрос: что если, когда Thread_Accept выполняет epoll_ctl (), а Thread_epoll находится в середине epoll_wait? Будет ли у него побочный эффект?

Заранее спасибо.

С уважением, Martin

Ответы [ 3 ]

5 голосов
/ 11 октября 2016

со страницы руководства epoll_wait:

Хотя один поток блокируется при вызове epoll_pwait (), другой поток может добавить файловый дескриптор к ожидаемому экземпляру epoll. Если новый дескриптор файла станет готовым, он вызовет вызов функции epoll_wait ().

Итак, никаких побочных эффектов при добавлении нового дескриптора файла: -)

(Это примечание к справочной странице является результатом ошибки, упомянутой nathansizemore)

0 голосов
/ 24 ноября 2015
0 голосов
/ 09 августа 2011

Почему бы тебе не сделать это одной нитью?

Вы можете установить сокет слушателя как неблокирующий и добавить сокет в свой большой epoll_wait

...