![]() |
|
Модераторы: xvr |
![]()
|
|
| olegusrocks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 23.7.2008 Репутация: нет Всего: нет |
Суть проблемы следующая:
В своей библиотеке создал функцию, которая прикрепляет к сигналу SIGALRM свой обработчик. Выглядит все так: ... ::signal(SIGALRM, SigHandler); ::pthread_kill(thread->id, SIGALRM); ... проблема в том, что другие библиотеки тоже могут использовать для SIGALRM свой обработчик, и вполне реально, что между формированием и отправкой сигнала другая библиотека прикрепит к сигналу свой обработчик, и тогда нарушится работа программы. Как можно избежать подобной ситуации, при этом все равно используя SIGALRM? буду благодарен всем ответившим |
|||
|
||||
| EnergoHokum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
Про сигналы в Linux, а именно:
Для функций, обрабатывающих потоки, существует и еще одно важное требование – реентерабильность. Поскольку обработчик сигнала может быть вызван в любой точке выполнения программы (а при не кототорых условиях во время обработки одного сигнала может быть вызван другой обработчик сигнала) в обработчиках додлжны использоваться функции, которые удовлетворяют требованию реентерабельности, то есть, могут быть вызваны в то время, когда они уже вызваны где-то в другой точке программы. Фактически, требование реентерабельности сводится к тому, чтобы функция не использовала никаких глобальных ресурсов, не позаботившись о синхронизации доступа к этим ресурсам. И ещё немного: начиная с Linux 2.6.6-mm2... для каждого процесса существует отдельная очередь сигналов, размер которой задаётся с помощью RLIMIT_SIGPENDING. Это сообщение отредактировал(а) EnergoHokum - 24.7.2008, 09:11 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |