我目前正在开发一个跨平台的任务调度程序,但是我在等待信号量时遇到了 sem_wait 旋转的问题。在 Windows 上,我使用的是 WaitForSingleObject,它在等待时产生线程,这正是我想要的。但是 sem_wait 导致线程只是旋转,这是低效且不必要的。有没有办法让 sem_wait 产生线程而不是仅仅旋转?
谢谢
您可以尝试使用条件变量而不是信号量。它们在功能上并不完全相同,但根据您的使用情况,您也许可以改用。它们的功能类似于 Windows 事件,因为您等待条件变量以等待某事发生,并且您向条件变量发出信号以指示某事已发生。
pthread_cond_wait
类似于WaitForSingleObject
,pthread_cond_signal
类似于SetEvent
。