pthread_mutex_timedlock documentation表示abs_timeout采用CLOCK_REALTIME。但是,我们都知道不适合为特定的持续时间计时(由于系统时间调整)。

有没有办法在可移植的CLOCK_MONOTONIC上设置pthread锁定超时? 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(),但可惜似乎没有。我猜你只希望希望有人不要安排时间!

09-08 10:26