防止Linux线程被调度程序中断

你如何告诉Linux中的线程调度程序不要因为任何原因中断你的线程? 我正在用户模式下编程。 简单地locking一个互斥体是否可以实现这个function? 我想阻止在执行某个函数时调度进程中的其他线程。 他们会阻止,我会浪费cpu周期与上下文切换。 我希望任何执行该函数的线程都能够在不中断的情况下完成执行,即使超过了线程的时间片也是如此。

Solutions Collecting From Web of "防止Linux线程被调度程序中断"

你如何告诉Linux中的线程调度程序不要因为任何原因中断你的线程?

不能真的做到这一点,你需要一个实时系统。 你将得到的关闭的事情是将调度策略设置为实时调度程序,例如SCHED_FIFO,并设置PTHREAD_EXPLICIT_SCHED属性。 在这里看到 ,即使现在,例如irq处理程序和其他的东西会打断你的线程并运行。

但是,如果你只关心你自己进程中的线程无法做任何事情,那么是的,让它们在一个互斥体上阻塞你正在运行的线程就足够了。

最难的部分是协调所有其他线程来抓取互斥体,只要你的线程需要做它的事情。

你应该建立你的SW,所以你依赖于从你的应用程序的角度来看“正确”的事情。 调度程序很复杂。 它会做它认为最好的。

上下文切换很便宜。 你说

我会浪费CPU周期与上下文切换。

但是你不应该这样看。 使用多线程机制的互斥锁和阻塞/等待进程。 机器在那里供您使用…

你不能。 如果你能阻止你的线程永远不会释放请求并挨饿其他线程。

你可以做的最好的是设置你的线程的优先级,以便调度器将优先于较低优先级的线程。

为什么不简单地让竞争的线程阻塞,那么调度程序将没有什么可以安排,但你的生活线程? 为什么复杂的设计第二次猜测调度程序?

在Linux下查看实时调度。 我从来没有这样做过,但是如果你确实需要这个,那么这个就和用户应用程序代码一样。

你似乎很害怕的事情并不是什么大不了的。 你不能阻止内核中断程序的真正的中断,或者更高优先级的任务想运行,但是在定期调度的时候内核会使用它自己的计算优先级值,这个值几乎可以处理大部分你所担心的事情。 如果线程A独占资源X(X可能是一个锁),线程B正在等待资源X变为可用,那么A的有效优先级至少与B的优先级一样高。 它还考虑到一个进程是否占用了大量的CPU,或者是否花费大量的时间来计算优先级。 当然,好的价值也在那里。