首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程、mq_timedreceive、pthread_cond_timedwait和CLOCK_REALTIME

线程、mq_timedreceive、pthread_cond_timedwait和CLOCK_REALTIME
EN

Stack Overflow用户
提问于 2015-11-23 14:25:14
回答 1查看 1.4K关注 0票数 4

我正在使用一个实现了两个posix功能的系统

代码语言:javascript
复制
mq_timedreceive() and pthread_cond_timedwait()

这两个函数都使用基于CLOCK_REALTIME的绝对超时。在系统启动过程中,这个时钟在不同的时间都会发生变化,可以向后或向前移动10秒到小时。

开放集团说:

如果支持计时器选项,则超时应基于CLOCK_REALTIME时钟;如果不支持计时器选项,则超时应基于time()函数返回的系统时钟。(mq_timedreceive) 对于由操作符不连续地推进系统时钟的情况,期望实现在中间时间处理任何时间等待,就好像该时间实际上已经发生一样。(pthread_cond_timedwait())

然而,在时钟向后设置的情况下,这并没有给出任何指导。

QNX通过提供

代码语言:javascript
复制
mq_timedreceive_monotonic().

mq_timedreceive_monotonic()函数是QNX中微子扩展;它类似于mq_timedreceive(),但它使用CLOCK_MONOTONIC,因此超时不受系统时间变化的影响。

在linux中是否有实现QNX功能的好方法?

对于mq_timedreceive(),我可以使用mq_receive()和poll()。但是对于条件变量,我还没有想出一个干净的方法。我可以用定时器和信号,但这似乎太复杂了。

当然,另一种解决方案是,不要调整时钟或使用从CLOCK_MONOTONIC派生的不同时间的日间时钟,但我无权更改设计。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-26 03:03:14

您可以通过在条件变量初始化时更改条件变量的时钟属性来更改pthread_cond_timedwait()在条件变量上使用的时钟,使用pthread_condattr_setclock()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33873374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档