clock_monotonic and pthread_mutex_timedlock/pthread_cond_timedwait[英] CLOCK_MONOTONIC and pthread_mutex_timedlock / pthread_cond_timedwait

本文是小编为大家收集整理的关于clock_monotonic and pthread_mutex_timedlock/pthread_cond_timedwait的处理方法,想解了clock_monotonic and pthread_mutex_timedlock/pthread_cond_timedwait的问题怎么解决?clock_monotonic and pthread_mutex_timedlock/pthread_cond_timedwait问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

pthread_mutex_mutex_timedlock document abs_timeout abs_timeout但是,我们都知道,对于定时持续时间(由于系统时间调整)是不合适的.

有没有办法在CLOCK_MONOTONIC上使Pthread锁定超时? pthread_cond_timedwait也是如此.

推荐答案

看过文档和pthread.h,我找不到一种方法来制作 pthread_mutex_timedlock 使用CLOCK_MONOTONIC,所以我认为这是不可能的.为 pthread_cond_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(),但是las似乎没有一个.我想您只需要希望有人不要设置时钟!

其他推荐答案

在OS X和FreeBSD上,您可以使用kqueue和kevent.在这里查看我的答案: https://stackoverflow.com/a/a/31174803/432

其他推荐答案

无法更改 pthread_mmutloclock 在glibc中.也许是由于向后的兼容性,单调时钟引入了晚于实时时间,因此有很多使用此类功能的软件可能会影响此功能.

.

linux的解决方案/s:

  • 您可以找到pthread_mutex_timedlock的源代码FUTEX which uses MONOTONIC by默认.因此,您可以通过使用此文章,这可能是一个很好的,强大的解决方案.

本文地址:https://www.itbaoku.cn/post/358985.html