多线程环境中的embedded_linux中的sleep_until(嵌入式Linux)

时间:2016-12-13 00:44:05

标签: timer embedded embedded-linux

我有一个运行多个线程的伪RT系统。我希望每个线程以特定频率(周期间隔)执行。我一直在使用usleep(time_until_reschedule)。问题是可以计算time_until_reschedule,然后一个更高优先级的线程可以抢占这个线程,我想避免这种行为。

我想实现类似" sleep_until"的内容。我正在考虑使用带有SIGEV_THREAD_ID的hrtimers(内置在我的内核中)来通知每个线程,同时线程调用sigwait()。

这是实现某种sleep_until()的合理方式还是在Linux下有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您的线程需要做什么并不清楚,但您可以使用clock_nanosleepEarliest Deadline First scheduling的组合。你可以在不计算睡眠持续时间的情况下睡觉,如果你害怕你的线程不会被唤醒,因为其他线程是CPU占用,那么EDF可能是你的解决方案。

对于clock_nanosleep检查this post。 对于EDF计划程序,请检查此article