Я новичок в C. Я хочу создать программу с двумя потоками, которые будут посылать сигналы (SIGUSR1 и SIGNUSR2) в цикле и четыре потока, которые будут ждать этих сигналов и обрабатывать их.Thread wait for Signal in loop
Я понял, что отправлю сигнал, который мне нужно сделать: kill(getpid,SIGUSR1);
, но как я создаю четыре потока, которые будут ждать сигнала? сигнал регистрируется на определенную функцию. Как четыре потока будут ждать одного и того же сигнала?
Могу ли я использовать другие потоки, проверяя также тип сигнала (не останавливая сигнал для достижения других потоков)?
Спасибо.
Update:
Я пытаюсь иметь четыре потока ожидания для сигналов, когда два потока посылают сигналы, нити не знают, какой поток будет ловить сигнал. Я не хочу указывать идентификатор потока, который получит сигнал.
При использовании pthread_kill()
Мне нужно указать идентификатор потока (который я пытаюсь не делать).
Есть ли причина, по которой вам нужно использовать сигналы (что похоже на проблему синхронизации)? – jev
Что вы подразумеваете под «случайным процессом»?Вы можете настроить сигнальные маски на поток, чтобы разрешить сигналу достичь определенных потоков, а затем использовать 'kill', чтобы ядро выбрало произвольный случайный поток для приема сигнала. Или вы можете активно перечислять все свои потоки, использовать генератор случайных чисел, чтобы выбрать из них, и отправить направленный сигнал. –
@ KerrekSB, могу ли я отправить сигнал на два процесса одновременно, и который когда-либо свободен, будет обрабатывать сигнал? Или я могу создать несколько процессов, принадлежащих к одной группе, и отправить сигнал всей группе? – Mike