Вы можете попробовать использовать условные переменные вместо семафоров. Они не полностью идентичны по функции, но в зависимости от вашего использования, вы можете использовать вместо этого. Они функционируют аналогично событиям Windows, так как вы ожидаете переменную условия, чтобы дождаться, когда что-то произойдет, и вы сигнализируете переменную условия, чтобы указать, что что-то произошло.
pthread_cond_wait
аналогично WaitForSingleObject
, а pthread_cond_signal
аналогично SetEvent
.