В Linux, в C ++ мне нужен способ, чтобы несколько клиентских процессов ожидали события, а затем один основной процесс вызывал все остальные клиентские процессы при возникновении события. Мне не нужно передавать какие-либо данные между процессами. Я хочу сделать это БЕЗ розеток или Boost! Единственный способ, которым я знаю, как это сделать, - создать именованный канал. Клиентские процессы могут использовать вызов poll()
для блокировки на именованном канале. Как только событие должно быть запущено, основной процесс может выполнить запись в именованный канал x раз, где x - число клиентских процессов, ожидающих в именованном канале.
Кажется, должен быть лучший способ сделать это. Например, основной процесс должен записать '1' в именованный канал, и все клиентские процессы будут запущены. В ядре у нас есть вызовы типа wait_event_interruptible()
и wake_up_all()
, но что эквивалентно пользовательскому пространству?
Как только клиентский процесс получает событие, он выполняет некоторую обработку, а затем go возвращается к ожиданию, пока не сработает другое событие.