iliya
написал 21 декабря 2004 года в 09:54 (1085 просмотров)
Ведет себя
как мужчина; открыл 13 тем в форуме, оставил 196 комментариев на сайте.
Какие атрибуты надо установить при создание pthread_create, чтоб он мог работать со своими сигналами
чтоб при вызове signal(…,…) он установил свой обработчик ,а не общий для всех.
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

Имхо, сии вещи суть независимы. Используй стандартные обработчики сигналов внутри нитей, никаких атрибутов не надо. А в чем проблема?
Good Luck,
UT
Очень просто например если приходит сигнал то он обрабатывается всеми потоками и вызов signal устанавливает обработчик тоже для всех потоков.
М-м-м-м… Я тут поковырялся, вроде все путем… Смотри:
//sigg.cc #include #include #include #include using namespace std; void one(int n) { cout << "Got a signal " << n << " so what?\n"; }; void two(int n) { cout << "Oh, my gosh! " << n << endl; }; void *func1(void *a) { for(;;) { sleep(1); signal(14,one); }; return NULL; }; void *func2(void *b) { for(;;) { sleep(1); signal(14,two); }; return NULL; }; int main() { pthread_t thread1, thread2; pthread_create(&thread1, NULL, func1, NULL); pthread_create(&thread2, NULL, func2, NULL); pthread_join(thread1, NULL); pthread_join(thread2, NULL); return 0; };На одном терминале я теперь запускаю sigg
А на другом посылаю killall -14 sigg
Так вот, результат
Oh, my gosh! 14
Got a signal 14 so what?
Oh, my gosh! 14
вполне соотвествует ожиданиям… Если, правда, убрать sleep(1), то сигнал будет три раза захватываться одной и той же нитью, равновероятно какой. Не в этом ли была твоя проблема?
Good Luck,
UT