Как перенести событие межпроцессного взаимодействия в Linux с помощью AutoResetEvent из Windows

Мой текущий код Windows использует именованное событие для межпроцессного взаимодействия. Может быть много процессов, ожидающих события, когда оно сигнализируется, все ожидающие процессы освобождаются, а затем событие возвращается в несигнальное состояние. Я использую для этого функцию PulseEvent.

Как мне это сделать в линуксе? Функции pthread представляют собой межпотоковое взаимодействие. Я не вижу, где семафоры могут обеспечить такое же поведение, как в Windows. Похоже, что семафор Posix освобождает только один ожидающий поток. Если бы семафор мог освободить все ожидающие потоки, это сработало бы. Есть ли что-то в Linux, чего мне не хватает?


person user3076935    schedule 07.12.2013    source источник
comment
Рассматривали ли вы возможность использования какой-либо переносимой библиотеки, такой как Qt??   -  person Basile Starynkevitch    schedule 07.12.2013
comment
Я не вижу, где он поддерживает ту функциональность, которая мне нужна.   -  person user3076935    schedule 07.12.2013
comment
В зависимости от того, что именно вы хотите сделать, возможно, подойдет переменная условия (pthread_cond_init()/pthread_cond_wait()/pthread_cond_broadcast()/pthread_cond_destroy()) или барьер (pthread_barrier_init()/pthread_barrier_wait()/pthread_barrier_destroy()).   -  person ninjalj    schedule 14.12.2013
comment
События автоматического сброса в Linux сложны, и я никогда их не видел. Я видел ручные события, и хорошим эквивалентом является pevents.   -  person jww    schedule 11.02.2014


Ответы (1)


Похоже, фьютекс может обеспечить поведение события Windows.

person user3076935    schedule 14.12.2013