有没有办法让sem_wait不旋转?

时间:2011-04-10 02:54:49

标签: pthreads posix semaphore spinlock

我目前正在开发一个跨平台的任务调度程序,但我在等待信号量时遇到sem_wait旋转问题。在Windows上,我正在使用WaitForSingleObject,它在等待时产生线程,这就是我想要的。但是sem_wait导致线程只是旋转,这是低效且不必要的。有没有办法让sem_wait产生线程而不仅仅是旋转?

由于

1 个答案:

答案 0 :(得分:2)

您可以尝试使用condition variables而不是信号量。它们的功能并不完全相同,但根据您的使用情况,您可能可以使用它。它们的功能与Windows事件类似,因为您等待条件变量等待某些事情发生,并且您发出一个条件变量来表示发生了某些事情。

pthread_cond_wait类似于WaitForSingleObject,而pthread_cond_signal类似于SetEvent