【问题标题】:Is there a way to make sem_wait not spin?有没有办法让 sem_wait 不旋转?
【发布时间】:2011-08-02 08:10:54
【问题描述】:

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

谢谢

【问题讨论】:

    标签: pthreads posix semaphore spinlock


    【解决方案1】:

    您可以尝试使用condition variables 代替信号量。它们在功能上并不完全相同,但根据您的使用情况,您也许可以改用。它们的功能类似于 Windows 事件,因为您等待条件变量以等待某事发生,并且您向条件变量发出信号以指示某事已发生。

    pthread_cond_wait 类似于WaitForSingleObjectpthread_cond_signal 类似于SetEvent

    【讨论】:

    • 太棒了,这正是我想要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    相关资源
    最近更新 更多