Важно помнить, что Linux (по крайней мере, и, возможно, многие другие Unices) могут объединять несколько сигналов одного типа в один экземпляр . Поэтому, если вы отправите процессу один сигнал со значением x , этот процесс гарантированно получит его; но если вы отправите 2 или более сигналов со значением x , процесс гарантированно получит только один из этих сигналов.
Кроме того, сигналы не гарантируются в том порядке, в котором они отправляются .
(Почему? В операционной системе Linux поддерживается битовая маска для каждой записи процесса, в которой ожидающие сигналы были отправлены. Всякий раз, когда планировщик пробуждает процесс, запускаются обработчики сигналов для всех ожидающих сигналов в произвольном порядке)
Что все это означает, что сигналы, как правило, не подходят для синхронизации процессов. Они работают надежно только тогда, когда интервалы времени между сигналами велики по отношению к интервалу между временами пробуждения процесса приема. И если процесс тратит много времени на блокировку, события пробуждения могут быть произвольно далеко друг от друга.
Вывод: не использовать сигналы для МПК.