34.2. 同步线程

sched_yield 命令是一个同步机制,它可以允许较低优先级线程运行。当从编写较差的应用程序中发布时,这种类型的请求容易出错。

较高的优先级线程可以调用 sched_yield 以允许其他线程运行。调用进程将移至正在该优先级运行的进程队列的尾部。如果发生这种情况时,没有以相同的优先级运行其他进程,则调用进程将继续运行。如果该进程的优先级很高,则可能会创建忙碌循环,从而使机器无法使用。

SCHED_DEADLINE 任务调用 sched_yield() 时,它会提供配置的 CPU,并且剩余的运行时会立即调整,直到下一期为止。sched_yield() 行为允许任务在下一期的开始便开始。

调度程序可以更好地判断何时以及是否还有其他工作线程正在等待运行。避免在任何实时任务中使用 sched_yield

流程

  • 要调用 sched_yield() 系统代码,请运行以下命令:

    for(;;) {
                do_the_computation();
                /*
    	     * Notify the scheduler the end of the computation
                 * This syscall will block until the next replenishment
                 */
    	    sched_yield();
            }

    SCHED_DEADLINE 任务使用基于冲突的搜索(CBS)算法限度,直到下一次执行循环开始为止。

其他资源