anonymous@RULINUX.NET~# Last login: 2024-11-22 11:21:48
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

Создание потока в обработчике сигнала

http://pastebin.com/m7a46279

Простейший код, 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)

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

Re:Создание потока в обработчике сигнала

вобщем решил проблему так - код потока создавашегося из обработчика переместил в обработчик, а остальным потокам заблокировал SIGUSR1 с помощью pthread_sigmask()

anonymous(*)(2009-07-23 12:29:39)

Opera/9.00 (Windows NT 5.1; U; ru)
[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

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
[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

Re:Создание потока в обработчике сигнала

Пездец как здорово.. Я теперь понял, почему некоторые утвеждают, что линукс - стабильная ОС: раз его поведение настолько неопределено, то можно смело утверждать, что он стабильно выполняет неопределенную работу.

anonymous(*)(2009-07-23 13:40:07)

[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

Re:Создание потока в обработчике сигнала

это POSIX, детка

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
[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

Re:Создание потока в обработчике сигнала

Да-да. С его ёбнутыми сигналами, не имеющими права на существование :)

anonymous(*)(2009-07-23 14:50:52)

[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

Re:Создание потока в обработчике сигнала

нет, ты не имеешь. сигналами можно пользоваться и пользуются, а ты совершенно бесполезное существо, не читающее маны

bugmaker(*)(2009-07-24 03:23:10)

Opera/9.62 (X11; Linux i686; U; en) Presto/2.1.1
[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

Re:Создание потока в обработчике сигнала

> сигналами можно пользоваться

Поясни - как в описанном случае можно пользоваться сигналами? :-P

anonymous(*)(2009-07-24 03:32:41)

[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

Re:Создание потока в обработчике сигнала

аккуратно. Не использовать в многопоточном процессе, итд, как в мане указано

bugmaker(*)(2009-07-24 04:18:54)

Opera/9.62 (X11; Linux i686; U; en) Presto/2.1.1
[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

Re:Создание потока в обработчике сигнала

Зачем тогда этот механизм вообще нужен?

anonymous(*)(2009-07-24 04:41:11)

[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

Re:Создание потока в обработчике сигнала

для взаимодействия процессов между собой, а так же процессов и ядра, кретин ты наш. Сходи маны почитай.

amoralyrr(*)(2009-07-24 14:56:52)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090718 Shiretoko/3.5.1
[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

Re:Создание потока в обработчике сигнала

> для взаимодействия процессов между собой, а так же процессов и ядра, кретин ты наш.

Чем для этого не подходят средства IPC?

> кретин ты наш. Сходи маны почитай.

Вот когда человек не блещет интеллектом - это сразу видно по его хамству и неспособности сослаться на конкретный материал.

anonymous(*)(2009-07-24 15:03:11)

[#] [Добавить метку] [Редактировать] Ответ на: Создание потока в обработчике сигнала от anonymous 2009-07-23 11:24:34
avatar
Скрыть

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
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!