Представим себе ситуацию, когда есть библиотечная функция, в которой подряд идут несколько блокирующих системных вызовов (например read). void foo() { ... read(...); // First call ... read(...); // Second call ... } Для меня критично, чтобы вызов этой функции уложился в 3 секунды: alarm(3); foo(); alarm(0); Обработчик сигнала ALRM определён пустым. Проблема в том, что сигнал ALRM прервёт 1-й read (вызов вернёт ошибку и errno станет равно EINTR). Но если функция не обрабатывает эту ситуацию, то она _навсегда_ зависнет во втором вызове read! Т.к. речь идёт о произвольной библиотечной функции, то нельзя делать предположений о количестве блокирующих системных функций в ней. Как решать подобную проблему (т.е. гарантированно прервать вызов произвольной функции)?
Ответ на:
комментарий
от MKuznetsov
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Запись в один сокет из нескольких потоков (2008)
- Форум Висит ли процесс на выполнении системного вызова? (2009)
- Форум blocking / non-blocking calls (2018)
- Форум alarm() (2001)
- Форум cron alarm (2004)
- Форум Alarm clock (2003)
- Новости В Linux 5.15 добавлен системный вызов для быстрого освобождения памяти умирающего процесса (2021)
- Форум Подвисает система Linux (2013)
- Форум alarm не алармит (2011)
- Форум Отсутствие ошибки при закрытии сокета (2013)