Приложения Mutliple, проводящие опрос по дескриптору - PullRequest
2 голосов
/ 27 декабря 2011

Может ли несколько процессов (не потоков) опрашивать дескриптор устройства (например, / dev / xyx) в режиме блокировки и просыпаться, когда драйвер возвращает POLLIN?

Подробности: У меня естьДрайвер и для поддержки уведомления о событиях асинхронного от драйвера для приложений пространства пользователя, я реализовал функцию опроса в драйвере.Я ожидаю, что несколько процессов выполнят опрос в моем дескрипторе / dev / xyz, при выполнении опроса драйвер немедленно помещает их в очередь ожидания из функции .poll, так что они блокируются, пока драйвер не вернет POLLIN.

Теперь он работает нормально, когда один дескриптор заблокирован одним процессом, поэтому, когда драйвер выполняет POLLIN, poll () разблокируется, и я обрабатываю его.Однако если в / dev / xyz заблокировано несколько процессов (путем опроса) и если драйвер отправляет POLLIN, разблокируется только один из процессов, а другой все еще блокируется.

Есть ли способчтобы убедиться, что все процессы, заблокированные в этом дескрипторе, проснулись, когда драйвер выполняет POLLIN для / dev / xyz?(Например, пройтись по списку очередей ожидания или что-то в этом роде) ??

1 Ответ

0 голосов
/ 27 декабря 2011

Вы можете попробовать заменить wake_up (или wake_up_interruptible) на wake_up_all (wake_up_interruptible_all). Это должно пробудить все ожидающие процессы.

...