该pthread_mutex_timedlock文件说, abs_timeout
需要CLOCK_REALTIME
。 然而,我们都知道,这是不合适的时间特定的时间(因系统时间调整)。
有没有一种方法,使在并行线程锁超时CLOCK_MONOTONIC
是便携式? 这同样有那么pthread_cond_timedwait。
该pthread_mutex_timedlock文件说, abs_timeout
需要CLOCK_REALTIME
。 然而,我们都知道,这是不合适的时间特定的时间(因系统时间调整)。
有没有一种方法,使在并行线程锁超时CLOCK_MONOTONIC
是便携式? 这同样有那么pthread_cond_timedwait。
说完看着文档和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()
但可惜似乎没有成为一个。 我猜你只希望有人不设置时钟!
在OS X和FreeBSD,你可以使用kqueue
和kevent
。 看到这里我的答案: https://stackoverflow.com/a/31174803/432