我正在尝试移植一个使用Semaphores到Mac OS X的项目(从linux)但是在Mac OS X上没有实现一些posix信号量
我在这个港口遇到的那个是 sem_timedwait()
我对信号量知之甚少,但是从手册页sem_wait()
似乎接近sem_timedwait
并且实现了
从手册页
sem_timedwait()
function应锁定函数中
sem
as所引用的信号量sem_wait()
.但是,如果在
不等待另一个进程或线程
通过执行sem_post()
函数来解锁信号量的情况下无法锁定信号量,则
在指定的超时到期时应终止此等待
从我对semphores如何工作的有限理解,我可以看到sem_timedwait()
更安全,但我仍然应该能够使用sem_wait()
它是否正确?如果不是我还有其他选择......
谢谢
超时很可能对算法的运行很重要.因此,使用sem_wait()
可能不起作用.
您可以使用sem_trywait()
,在所有情况下立即返回.然后,您可以循环,并使用您选择的休眠间隔,每次递减总超时,直到您用完超时或获取信号量.
一个更好的解决方案是重写算法以使用条件变量,然后您可以使用pthread_cond_timedwait()
来获得适当的超时.