Size: a a a

2021 April 30

c

codingteam@cjr in codingteam
Minoru
слава моей тест-матрице, гоняющей все мажорные версии GCC и Clang
источник

FO

FORTRAN ONE LOVE in codingteam
начиная с GCC 4.4?
источник

c

codingteam@cjr in codingteam
sergevp
Загуглил, что такое "self-pipe trick" ( https://stackoverflow.com/a/290025 ) В целом интересный подход. Можно использовать, если умрёт слишком много детей одновременно... И надо посчитать число погибших.
источник

c

codingteam@cjr in codingteam
Minoru
@foxtran: нет, с 5.0. Раньше начинал с 4.9, но пришлось дропнуть из-за неполной поддержки C++11. Его долгое время хватало, но в итоге нашёлся какой-то маленький constexpr, которого в 4.9 не было
источник

c

codingteam@cjr in codingteam
sergevp
В общем, self-pipe trick — это, похоже, хак для тех, кто по каким-то причинам не хочет использовать mutex/semaphore/condition.
источник

c

codingteam@cjr in codingteam
Minoru
sergevp: а разве их можно использовать в обработчиках сигналов?
источник

c

codingteam@cjr in codingteam
Minoru
там же, во-первых, асинхронность, во-вторых, желательно быстро завершиться
источник

c

codingteam@cjr in codingteam
sergevp
Так обработчик как раз и будет сигналить другому (ну или этому же, прерванному) потоку, что сигнал пришёл.
источник

c

codingteam@cjr in codingteam
sergevp
Тут вместо него в обработчике делают write(selfpipe[1], "",1);
источник

c

codingteam@cjr in codingteam
sergevp
А можно было сделать какой-нибудь pthread_cond_signal()
источник

c

codingteam@cjr in codingteam
Minoru
а если приходит два сигнала? Первый сигналит, поток начинает обрабатывать, тут запускается второй обработчик, пытается посигналить — и блокируется, потому что семафор не опустили ещё. И поток, в котором он выполняется, зависает
источник

c

codingteam@cjr in codingteam
sergevp
Не, pthread_cond_signal() никогда не блокируется. Наоборот, он разблокирует другие pthread_cond_wait()-ы, если они есть. Ну или ничего не делает, если их нет.
источник

c

codingteam@cjr in codingteam
Minoru
а, ок
источник

c

codingteam@cjr in codingteam
sergevp
Ещё, теоретически, можно sem_post() делать (ну и sem_timedwait() для ожидания). Так можно, например, посчитать количество убитых детей за 5 секунд. В смысле, мы не пропустим ни один сигнал, даже если кто-то из них умер, пока мы его не ждали.
источник

c

codingteam@cjr in codingteam
Minoru
а сигналы же, вроде, могут объединяться?
источник

c

codingteam@cjr in codingteam
Minoru
ну т.е. 100 детей померло, а сигнал один?
источник

c

codingteam@cjr in codingteam
sergevp
Да? Тогда не знаю, не проверял. :)
источник

c

codingteam@cjr in codingteam
sergevp
Интересно, как это проверить...
источник

c

codingteam@cjr in codingteam
источник

c

codingteam@cjr in codingteam
Minoru
— Unix, а что там с надёжной доставкой сигналов?
— А?
— С доставкой сигналов, говорю, что? С надёжной.
— Что?
источник