【发布时间】:2017-09-14 12:57:17
【问题描述】:
据我了解,pthread_cond_timedwait 将通过获取当前时间来使用,然后在未发出条件信号的情况下计算 pthread_cond_timedwait 应该退出的绝对时间。
有没有一种简单的方法可以使用此函数可靠地执行周期性任务(问题是在当前时间点和调用 pthread_cond_timedwait 之间的时间变化)?
我有一个周期性的任务,应该每秒运行一次。
do {
pthread_mutex_lock(mutex);
tx = gettimeofday + 1 second;
do_some_simple_periodic_task();
pthread_cond_timedwait(condition, mutex, tx);
pthread_mutex_unlock(mutex);
} while (!some_exit_condition);
如果上下文(包括 some_exit_condition)更新,则发出条件信号。
有没有办法使用单调计时器或类似的东西?如果不是,那么 pthread_cond_timedwait 的用例是什么?仅适用于您不关心额外延迟小时的情况?
我看到了一个解决方案,其中另一个线程定期发出信号 (How to make pthread_cond_timedwait() robust against system clock manipulations?),但这似乎是一种 hack。
是否有其他更好的方法可以让线程休眠一段时间(不易发生挂钟变化)但立即响应外部条件?
【问题讨论】: