K_s*_*ler 11 c c++ linux timing scheduler
我有一个在Linux系统上运行的线程,我需要以尽可能准确的间隔执行.例如,每ms执行一次.
目前,这是通过创建一个计时器来完成的
timerfd_create(CLOCK_MONOTONIC, 0)
Run Code Online (Sandbox Code Playgroud)
,然后在结构中传递所需的睡眠时间
timerfd_settime (fd, 0, &itval, NULL);
Run Code Online (Sandbox Code Playgroud)
在此计时器上执行阻塞读取调用,该计时器停止线程执行并报告丢失的唤醒调用.
问题是,在更高的频率下,即使CPU使用率低于10%,系统也会开始失去最后期限.我认为这是由于调度程序没有经常唤醒线程来检查阻塞调用.是否有一个命令可以用来告诉调度程序在可能的情况下以一定的间隔唤醒线程?繁忙等待是一个糟糕的选择,因为系统处理许多其他任务.
谢谢.
您需要获取RT linux*,然后增加要定期唤醒的进程的RT优先级.
除此之外,我没有在您的代码中看到问题,如果您的进程没有被阻止,它应该可以正常工作.
(*)RT linux - 一个应用了一些实时调度补丁的操作系统.