sleep_until in embedded_linux 在多线程环境中(嵌入Linux)
sleep_until in embedded_linux in multi-threaded environment (embedded Linux)
我有一个 运行 多线程的伪 RT 系统。我希望每个线程以特定频率(周期间隔)执行。我一直在使用 usleep(time_until_reschedule)。问题是 time_until_reschedule 可以被计算,然后一个更高优先级的线程可以抢占这个线程,我想避免这种行为。
我想实现类似 "sleep_until" 的功能。我正在考虑使用带有 SIGEV_THREAD_ID 的 hrtimers(内置在我的内核中)在线程调用 sigwait() 时通知每个线程。
这是实现某种 sleep_until() 的明智方法还是 Linux 下有更好的方法?
不清楚您的线程需要做什么,但您可以使用 clock_nanosleep
和 Earliest Deadline First scheduling 的组合。你可以在不计算睡眠持续时间的情况下睡觉,如果你害怕你的线程不会被唤醒因为其他线程是 CPU 猪,那么 EDF 可能是你的解决方案。
对于 clock_nanosleep 检查 this post。
对于 EDF 调度程序,请检查此 article.
我有一个 运行 多线程的伪 RT 系统。我希望每个线程以特定频率(周期间隔)执行。我一直在使用 usleep(time_until_reschedule)。问题是 time_until_reschedule 可以被计算,然后一个更高优先级的线程可以抢占这个线程,我想避免这种行为。
我想实现类似 "sleep_until" 的功能。我正在考虑使用带有 SIGEV_THREAD_ID 的 hrtimers(内置在我的内核中)在线程调用 sigwait() 时通知每个线程。
这是实现某种 sleep_until() 的明智方法还是 Linux 下有更好的方法?
不清楚您的线程需要做什么,但您可以使用 clock_nanosleep
和 Earliest Deadline First scheduling 的组合。你可以在不计算睡眠持续时间的情况下睡觉,如果你害怕你的线程不会被唤醒因为其他线程是 CPU 猪,那么 EDF 可能是你的解决方案。
对于 clock_nanosleep 检查 this post。 对于 EDF 调度程序,请检查此 article.