4.2. 同步线程
sched_yield 函数是一个同步机制,可为较低优先级线程获得运行机会。在较差的应用程序中发出不良的应用程序时,这种类型的请求容易出错。
较高的优先级线程可以调用 sched_yield (),以允许其他线程有机会运行。调用进程将移到该优先级中运行的进程的尾部。当发生这种情况时,如果没有其他进程以同一优先级运行,调用进程将继续运行。如果该进程的优先级很高,它可能会创建一个忙碌的循环,从而导致机器无法使用。
当 SCHED_DEADLINE 任务调用 sched_yield () 时,它会提供配置的 CPU,剩余的运行时会立即节流,直到下一个周期为止。使用 sched_yield () 时,任务将在下一期开始时唤醒。
调度程序可以更好地决定何时以及是否实际还有其他线程等待运行。避免在任何实时任务中使用 sched_yield ()。
先决条件
-
已安装 POSIX 线程(
pthread)开发库。
流程
要调用
sched_yield ()函数,请运行以下代码:for(;;) { do_the_computation(); /* * Notify the scheduler at the end of the computation * This syscall will block until the next replenishment */ sched_yield(); }SCHED_DEADLINE任务受基于冲突的搜索(CBS)算法节流,直到下一个周期(在循环的下一次执行开始)。提示如需更多信息,请参阅系统中的
pthread.h (P)、sched_yield (2)和sched_yield (3p)手册页。