LINUX.ORG.RU

Подскажите насчет сигналов, кто знает...


0

0

У меня такая задача: есть тред (pthread), который должен ожидать чего-то в функции select. Родительский тред ждет в это время некоего семафора. Когда семафор сигналит, он должнен убить дочерний тред, ожидающий в select. Я так понимаю, нужно послать ему сигнал. Вопрос: как это красиво сделать, какой сигнал посылать? Обязательно ли пользоваться функцией pselect, или можно обойтись и select? Если можно, кто-нибудь, набросайте общую схемку. Буду очень признателен.


> Я так понимаю, нужно послать ему сигнал.
Ну, треды с сигналами вообще не очень дружат. Если пайп прокинут ОТ папы К дочке,
то папа может просто через пайп сказать дочке - "Сдохни!"

> Обязательно ли пользоваться функцией pselect, или можно обойтись и select?
На хрена тебе этот новый pselect, который отсутствует на большинстве работающих систем?

Die-Hard ★★★★★
()

>Ну, треды с сигналами вообще не очень дружат.

Дружат дружат, вопрос только как они дружат а то в свое время
не нашел толковой доки как в тредах слать сигналы вообщем
поэкспереминтировал и стал слать.

По поводу схемы.
Перед select рекомендуется маскировать левые сигналы
или вешать обработку их прихода. Так как любой незамаскированный
прилетевший сигнал собъет select.
Вешаем обработчик на этот сигнал типа colse all, free all(если требуется) как там тред выходит ? pthread_exit
и все.

Aleks_IZA
()
Ответ на: комментарий от Aleks_IZA

Aleks IZA (*) (2003-02-10 03:59:22.566):

> Дружат дружат, вопрос только как они дружат...
Если только pthreads, только в Линухе и только сегодня, то да.
Я почти уверен, что любая прога на нитках, интенсивно юзающая сигналы,
через пару-тройку лет не скомпилится.

> Так как любой незамаскированный прилетевший сигнал собъет select.
IMHO проще (и ГОРАЗДО портабильнее) при слете select'а проверять EINTR.

Вообще, какой смысл в описываемом случае использовать сигналы?

Если надо просто прибить тред, то pthread_cancel.

Если надо помыться перед смертью, то это можно доверить папе перед pthread_cancel
- адреса-то общие!

Логически самое правильное - сказать дочернему треду через пайп, чтобы он сдох.
Прикинь, ты СПЕЦИАЛЬНО для подобных целей прокинул сигнальный пайп, а теперь ты
зачем-то хочешь еще один IPC механизм задействовать.

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.