anonymous@RULINUX.NET~# | Last login: 2024-12-26 10:06:45 |
Регистрация Вход | Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск |
Форум - Development | [RSS] |
Простейший код, 37 строк.
На SIGUSR1 вешается обработчик сигнала usr1_nandler(), который запускает поток th2(), выполняющий временную задержку в 5 сек
Запускается поток th1(), выполняющий временную задержку в 20 сек. С помощью pthread_join() ожидается его завершение.
Все бы хорошо, но почему-то по-завершении usr1_nandler(), сработавшего от внешнего сигнала, завершается pthread_join() и сама программа, не дождавшись завершения th1().
вобщем вывод: "main start" "th1 start" "usr1 sig" "th2 start" "usr1 sig end" "join" "main end"
хотя вроде должен быть: "main start" "th1 start" "usr1 sig" "th2 start" "usr1 sig end" "th2 end" "th1 end" "join" "main end"
если в конце main() вставить sleep(20), то: "main start" "th1 start" "usr1 sig" "th2 start" "usr1 sig end" "join" "th2 end" "th1 end" "main end"
Если в обработчике поток не создавать, то работает правильно.., если сигнал посылать из самой программы с помощью raise(), то работает правильно .., я в замешательстве
Может кто-нибудь знает в чем дело, почему проиходит ложное срабатывание pthread_join?
anonymous(*) (2009-07-23 11:24:34)
Opera/9.00 (Windows NT 5.1; U; ru)
|
|
|
Скрыть
Re:Создание потока в обработчике сигналаman 2 signal > The effects of this call in a multi-threaded process are unspecified. > POSIX has the concept of "safe function". If a signal interrupts an unsafe function, and handler calls an unsafe function, then the behavior is undefined. Safe functions are listed explicitly in the various standards. не то? bugmaker(*)(2009-07-23 12:42:01)
Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 |
Скрыть
Re:Создание потока в обработчике сигналаПездец как здорово.. Я теперь понял, почему некоторые утвеждают, что линукс - стабильная ОС: раз его поведение настолько неопределено, то можно смело утверждать, что он стабильно выполняет неопределенную работу. |
bugmaker(*)(2009-07-23 14:17:52)
Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4 |
Скрыть
Re:Создание потока в обработчике сигналаДа-да. С его ёбнутыми сигналами, не имеющими права на существование :) |
Скрыть
Re:Создание потока в обработчике сигналанет, ты не имеешь. сигналами можно пользоваться и пользуются, а ты совершенно бесполезное существо, не читающее маны |
Скрыть
Re:Создание потока в обработчике сигнала> сигналами можно пользоваться Поясни - как в описанном случае можно пользоваться сигналами? :-P |
Скрыть
Re:Создание потока в обработчике сигналааккуратно. Не использовать в многопоточном процессе, итд, как в мане указано |
Скрыть
Re:Создание потока в обработчике сигнала> для взаимодействия процессов между собой, а так же процессов и ядра, кретин ты наш. Чем для этого не подходят средства IPC? > кретин ты наш. Сходи маны почитай. Вот когда человек не блещет интеллектом - это сразу видно по его хамству и неспособности сослаться на конкретный материал. |
Скрыть
Re:Создание потока в обработчике сигнала> Чем для этого не подходят средства IPC? Сигналы это и есть одно из средств IPC. > конкретный материал. В твоём случае невежество столь удивительно велико, что даже трудно предложить что-то конкретное. Ты даже "man signal" не удосужился прочесть. Нагугли себе самый простецкий букварь, и пользуйся. Запрос "сигналы unix" думаю подойдёт. bugmaker(*)(2009-08-03 16:07:29)
Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.12 |
|
|
|
Этот тред читают 2 пользователя: |
Анонимных: 2 Зарегистрированных: 0 |
Re:Создание потока в обработчике сигнала
вобщем решил проблему так - код потока создавашегося из обработчика переместил в обработчик, а остальным потокам заблокировал SIGUSR1 с помощью pthread_sigmask()
Opera/9.00 (Windows NT 5.1; U; ru)