我有一个运行多个线程的伪RT系统。我希望每个线程以特定频率(周期间隔)执行。我一直在使用usleep(time_until_reschedule)。问题是可以计算time_until_reschedule,然后一个更高优先级的线程可以抢占这个线程,我想避免这种行为。
我想实现类似" sleep_until"的内容。我正在考虑使用带有SIGEV_THREAD_ID的hrtimers(内置在我的内核中)来通知每个线程,同时线程调用sigwait()。
这是实现某种sleep_until()的合理方式还是在Linux下有更好的方法吗?
答案 0 :(得分:0)
您的线程需要做什么并不清楚,但您可以使用clock_nanosleep
和Earliest Deadline First scheduling的组合。你可以在不计算睡眠持续时间的情况下睡觉,如果你害怕你的线程不会被唤醒,因为其他线程是CPU占用,那么EDF可能是你的解决方案。