Есть ли способ заставить sem_wait не вращаться? - PullRequest
1 голос
/ 10 апреля 2011

В настоящее время я работаю над кроссплатформенным планировщиком задач, но у меня проблема с вращением sem_wait во время ожидания семафора.В Windows я использую WaitForSingleObject, который выдает поток во время ожидания, чего я и хочу.Но sem_wait заставляет потоки просто вращаться, что неэффективно и не нужно.Есть ли способ заставить sem_wait выдавать поток вместо того, чтобы просто вращаться?

Спасибо

1 Ответ

2 голосов
/ 10 апреля 2011

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

pthread_cond_wait аналогично WaitForSingleObject, а pthread_cond_signal аналогично SetEvent.

...