我在 linux 内核的驱动程序上下文中运行 - 该驱动程序将一个值写入寄存器 - 一个需要一些时间(约 5 毫秒)的操作。我想在那段时间睡觉,以便将 CPU 交给其他线程 - 但对我来说,在我醒来后立即恢复 CPU 非常重要(我不能超过一个短暂的超时)。同样的问题也适用于使用互斥锁 - 假设我正在阻止互斥锁(并触发重新调度) - 如何确保在释放互斥锁时立即恢复 CPU?
有没有办法做到这一点?它涉及什么?(设置进程优先级?特殊调度模式?更改内核配置?)
编辑:我将重新表述关于互斥锁的问题,因为它有点复杂:我有一个由重要线程使用的互斥锁(因为超时限制很重要)。我想拿这个互斥锁,知道如果我将阻塞它并重新调度,锁将很快被释放(因为这些线程将具有高优先级),紧接着,我被阻塞的线程将能够运行(而不是其他一些不相关的程序)。这样,我可以节省 CPU 时间,同时又不会冒超时违规的风险。我目前使用忙等待以避免重新安排(我的内核是非抢占式的),但我不喜欢这种解决方案。
任何帮助将不胜感激!
谢谢