Скажем, у меня есть обработчик сигнала в main (), который обрабатывает тревогу по таймеру.
Нет, нет.Обработчик сигнала - это функция, и C не имеет осмысленного смысла, в котором одна функция может находиться внутри другой.
У меня также есть рабочие потоки, которые создает main, у которых нет этого обработчика сигнала, потому что логикатребуется для сигнала содержится в main.
Расположение сигналов, включая пользовательские обработчики, являются свойствами всего процесса.Вы не можете иметь разные расположения для одного и того же сигнала в разных потоках одного и того же процесса.Более того, нет, логика обработки сигнала заключается в его обработчике сигналов, если он есть, или в ядре, если его нет.Функции, доступные для процесса, являются также свойством для процесса, а не свойством для потока.
Я считаю, что это будет проблемой, потому что если один из рабочих потоков в настоящее время выполняется, когдаСигнал отправляется, он перехватит сигнал и не будет иметь необходимого обработчика сигнала для его обработки.
Не обязательно, и нет.
Каждый поток имеет свою собственную маску сигнала, котораяконтролирует, какие сигналы могут быть доставлены на него.Поток наследует свою маску сигналов от своего родительского потока и может впоследствии изменить эту маску с помощью функции pthread_sigmask()
.Таким образом, вы можете контролировать, в каком потоке работают ваши обработчики сигналов и, что не менее важно, какие потоки могут прерываться сигналами, поэтому не обязательно, что сигналы будут доставляться вашим рабочим потокам.
Но также нет, отдельные потоки не имеют отдельных обработчиков сигналов в любом случае, как я уже обсуждал.У каждого потока есть все обработчики сигналов, которые есть у процесса, потому что они принадлежат процессу, а не отдельным потокам.
Но кажется излишним включать определения каждого отдельного соответствующего обработчика пользовательских сигналов во все возможныеконтекст.Я что-то упустил?
Да.Я не уверен, какие именно детали вам не хватает, но смотрите выше.