Интересный вопрос ... Я прочитал текущий POSIX и не нашел конкретного ответа, т. Е. Нет спецификации о параллельных вызовах. Итак, я объясню, почему я считаю, что стандарт означает, что все проснется.
Соответствующая часть text для select
/pselect
является:
После успешного завершения, pselect() или выберите() функция должна изменить объекты на который указывает readfds, writefds и errorfds аргументы, чтобы указать, какой файл дескрипторов готовы для чтения, готовы к записи, или находятся в состоянии ошибки в ожидании, соответственно, [...]
и позже
Дескриптор считается готовым к чтению, когда вызов функции входа с O_NONBLOCK ясно не будет блокировать, будет ли функция передачи данных успешно. (Функция может возвращать данные, указание конца-файл или ошибку , кроме одного о том, что он заблокирован, и в каждом из этих случаев дескриптор считается готовым для чтения.)
в короткой (в случае чтения только), мы можем понять, как это:
select
не блокирует это означает, что следующий вызов функции входа с O_NONBLOCK
не возвращает ошибку с errno==EWOULDBLOCK
. [Обратите внимание, что «следующая» - это моя интерпретация вышеизложенного.]
Если кто-то допускает эту интерпретацию, то два одновременных вызова select
могут возвращать тот же FD, что и для чтения. На самом деле, даже если они не являются параллельными, но первый поток вызывает select
, причем некоторый FD является читаемым, а затем, например,, read
, второй поток, вызывающий select
между двумя, может вернуть FD как читаемый для второго потока.
Теперь соответствующая часть для «просыпался» части вопроса заключается в следующем:
Если ни один из выбранных дескрипторов не готовы к запрошенной операции pselect() или выберите() функцию блокируется до тех пор, пока, по меньшей мере, одна из запрошенных операций не станет готова, пока не произойдет тайм-аут, или пока не будет прерван сигнал.
Здесь четко изложенная интерпретация предполагает, что все ожидающие вызовы возвратятся.
Благодарим вас за исчерпывающий ответ. Я хочу, чтобы стандарт был более ясным. – wilx
Действительно, хотелось бы этого. – subsub