gpt4 book ai didi

macos - Mac OS X 上的 POSIX 信号量 : sem_timedwait alternative

转载 作者:行者123 更新时间:2023-12-04 02:01:00 25 4
gpt4 key购买 nike

我正在尝试将一个使用信号量的项目(来自 linux)移植到 Mac OS X 但是一些 posix 信号量没有在 Mac OS X 上实现

我在这个端口打到的一个是 sem_timedwait()
我不太了解信号量,但从手册页 sem_wait()好像接近sem_timedwait它被实现了

从手册页

sem_timedwait() function shall lock the semaphore referenced by
sem as in the sem_wait() function. However, if the semaphore cannot be
locked without waiting for another process or thread to unlock the
semaphore by performing a sem_post() function, this wait shall be ter-
minated when the specified timeout expires



从我对信号量工作原理的有限理解中,我可以看到 sem_timedwait()更安全,但我仍然应该能够使用 sem_wait()

这样对吗?如果不是我还有什么其他选择...

谢谢

最佳答案

很可能超时对算法的操作很重要。因此只需使用 sem_wait()可能不起作用。

您可以使用 sem_trywait() ,在所有情况下都会立即返回。然后,您可以循环并使用您选择的 sleep 间隔,每次减少总超时,直到超时用完或获取信号量。

更好的解决方案是重写算法以使用条件变量,然后您可以使用 pthread_cond_timedwait()以获得适当的超时。

关于macos - Mac OS X 上的 POSIX 信号量 : sem_timedwait alternative,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/641126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com