Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Доставка сигналов только одному потоку : может ли часть потеряться?

#c #unix #freebsd #pthread


Всем добрый день!
Если доставка некоторого сигнала разрешена только одному из потоков, может ли на
практике быть случай, когда несколько однотипных сигналов (SIGCHLD) будут посланы практически
одновременно, и процессор не успеет переключиться на данный поток вовремя, вследствии
чего обработчик сигнала выполнится 1 раз вместо, к примеру, 3-х ?     


Ответы

Ответ 1



Да, есть проблема. Если несколько сигналов SIGCHLD одновременно ждут доставки, будет доставлен лишь один сигнал. Источник. Там же рекомендация по обходу проблемы. Вот ещё, судя по всему, полезная информация по теме: handling SIGCHLD with multiple children.

Ответ 2



Может. В системе нет очереди сигналов, есть только битовая маска, приходящий сигнал выставляет там бит, при вызове обработчика (или действию по умолчанию) система сбрасывает этот бит.

Ответ 3



Не путаем понятия потоки (threads) и процессы (process). Процесс может содержать в себе несколько потоков (тредов или нитей). Если используешь сигналы, то он направляется конкретно процессу, а значит обработчику сигнала в этом процессе. man sigaction man signal

Комментариев нет:

Отправить комментарий