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