sergevp Загуглил, что такое "self-pipe trick" ( https://stackoverflow.com/a/290025 ) В целом интересный подход. Можно использовать, если умрёт слишком много детей одновременно... И надо посчитать число погибших.
Minoru @foxtran: нет, с 5.0. Раньше начинал с 4.9, но пришлось дропнуть из-за неполной поддержки C++11. Его долгое время хватало, но в итоге нашёлся какой-то маленький constexpr, которого в 4.9 не было
Minoru а если приходит два сигнала? Первый сигналит, поток начинает обрабатывать, тут запускается второй обработчик, пытается посигналить — и блокируется, потому что семафор не опустили ещё. И поток, в котором он выполняется, зависает
sergevp Не, pthread_cond_signal() никогда не блокируется. Наоборот, он разблокирует другие pthread_cond_wait()-ы, если они есть. Ну или ничего не делает, если их нет.
sergevp Ещё, теоретически, можно sem_post() делать (ну и sem_timedwait() для ожидания). Так можно, например, посчитать количество убитых детей за 5 секунд. В смысле, мы не пропустим ни один сигнал, даже если кто-то из них умер, пока мы его не ждали.