Если один поток (скажем, X) ожидает epoll_wait()
, другой поток (скажем, Y) может вызвать epoll_ctl()
, чтобы зарегистрировать интерес к файловому дескриптору 9
. Может ли предыдущий вызов epoll_wait()
в потоке X вернуть файловый дескриптор 9
, добавленный потоком Y? Первоначальный вызов epoll_wait()
ни разу не возвращался посередине.
Теперь я хочу сравнить это и задать соответствующие вопросы в отношении двух других вызовов опроса в операционных системах. poll()
и kqueue
- Если ответ на приведенный выше вопрос верен, то есть ли способ добиться аналогичного поведения с системным вызовом
poll()
? - Предположим, что
epoll_ctl()
является потокобезопасным, а поток X может безопасно вызыватьepoll_ctl()
, а вызовepoll_wait()
возвращает информацию о том, готов ли файловый дескриптор9
к вводу-выводу. Разделение функции объявления интереса к файловому дескриптору и функции ожидания делает эту функцию удивительной. Но люди часто говорят, чтоkqueue
иepoll
используются для одной и той же функциональности. Однакоkqueue
не имеет отдельной функции для объявления заинтересованности в получении обратной связи о событии для дескриптора. Кто-нибудь знает, какkqueue
можно использовать так же, какepoll
?epoll
кажется лучшим потокобезопасным вариантом прямо сейчас, если он разрешает потокобезопасное «объявление интереса»
kqueue
вы можете заявить о заинтересованности без получения отзывов о событии, передав 0 в качестве параметраnevents
. См., например, этот ответ - person Tsyvarev   schedule 02.01.2016