pthread_mutex_timedlock 文档 说 abs_timeout
需要一个 CLOCK_REALTIME
。但是,我们都知道对特定持续时间进行计时是不合适的(由于系统时间调整)。
有没有办法使 CLOCK_MONOTONIC
上的 pthread 锁定超时,这是可移植的? pthread_cond_timedwait 也是如此。
原文由 Zach Saw 发布,翻译遵循 CC BY-SA 4.0 许可协议
pthread_mutex_timedlock 文档 说 abs_timeout
需要一个 CLOCK_REALTIME
。但是,我们都知道对特定持续时间进行计时是不合适的(由于系统时间调整)。
有没有办法使 CLOCK_MONOTONIC
上的 pthread 锁定超时,这是可移植的? pthread_cond_timedwait 也是如此。
原文由 Zach Saw 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
3 回答2k 阅读✓ 已解决
4 回答4k 阅读
2 回答3.9k 阅读✓ 已解决
2 回答5.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
查看文档和
pthread.h
后,我找不到使 pthread_mutex_timedlock 使用的方法CLOCK_MONOTONIC
所以我认为这(目前)不可能。但是,对于 pthread_cond_timedwait ,您可以使用如下代码:为了清楚起见,我省略了错误代码检查,但你当然应该这样做。
我假设使用
CLOCK_REALTIME
因为它始终可用,而原则上CLOCK_MONOTONIC
是可选的。另外,我想知道设置绝对超时是否可以在系统调用被信号等中断后更容易恢复。但是,在某些情况下可以设置时钟而不是其他情况似乎非常不一致 - 确实应该有一个
pthread_mutexattr_setclock()
,但可惜似乎没有。我想你只需要希望有人没有设置时钟!