#c #unix #freebsd #pthread
Всем добрый день! Если доставка некоторого сигнала разрешена только одному из потоков, может ли на практике быть случай, когда несколько однотипных сигналов (SIGCHLD) будут посланы практически одновременно, и процессор не успеет переключиться на данный поток вовремя, вследствии чего обработчик сигнала выполнится 1 раз вместо, к примеру, 3-х ?
Ответы
Ответ 1
Да, есть проблема. Если несколько сигналов SIGCHLD одновременно ждут доставки, будет доставлен лишь один сигнал. Источник. Там же рекомендация по обходу проблемы. Вот ещё, судя по всему, полезная информация по теме: handling SIGCHLD with multiple children.Ответ 2
Может. В системе нет очереди сигналов, есть только битовая маска, приходящий сигнал выставляет там бит, при вызове обработчика (или действию по умолчанию) система сбрасывает этот бит.Ответ 3
Не путаем понятия потоки (threads) и процессы (process). Процесс может содержать в себе несколько потоков (тредов или нитей). Если используешь сигналы, то он направляется конкретно процессу, а значит обработчику сигнала в этом процессе. man sigaction man signal
Комментариев нет:
Отправить комментарий