CLOCK_MONOTONIC 和 pthread_mutex_timedlock / pthread_cond_timedwait

新手上路,请多包涵

pthread_mutex_timedlock 文档abs_timeout 需要一个 CLOCK_REALTIME 。但是,我们都知道对特定持续时间进行计时是不合适的(由于系统时间调整)。

有没有办法使 CLOCK_MONOTONIC 上的 pthread 锁定超时,这是可移植的? pthread_cond_timedwait 也是如此。

原文由 Zach Saw 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 759
1 个回答

查看文档和 pthread.h 后,我找不到使 pthread_mutex_timedlock 使用的方法 CLOCK_MONOTONIC 所以我认为这(目前)不可能。但是,对于 pthread_cond_timedwait ,您可以使用如下代码:

 pthread_condattr_t attr;
pthread_cond_t cond;
/* ... */
pthread_condattr_init(&attr);
pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
pthread_cond_init(&cond, &attr);

为了清楚起见,我省略了错误代码检查,但你当然应该这样做。

我假设使用 CLOCK_REALTIME 因为它始终可用,而原则上 CLOCK_MONOTONIC 是可选的。另外,我想知道设置绝对超时是否可以在系统调用被信号等中断后更容易恢复。

但是,在某些情况下可以设置时钟而不是其他情况似乎非常不一致 - 确实应该有一个 pthread_mutexattr_setclock() ,但可惜似乎没有。我想你只需要希望有人没有设置时钟!

原文由 Cartroo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题