在任务并发执行时,会出现多个任务同时操作同一个资源的情况,不同的任务会有不同的优先级,因此需要一种机制来确定哪个任务可以优先访问资源。这个机制就是抢占优先级。
抢占优先级是指任务可以被立即中断并由较高优先级任务来执行。在实时操作系统中,抢占式调度是常见的调度方式。
二、响应优先级
三、抢占式调度与响应式调度的区别
抢占式调度是指当高优先级任务进入可运行状态时,操作系统会立即抢占当前任务的CPU,并启动高优先级任务运行。而响应式调度是指依据任务的响应优先级来确定任务的运行顺序,即响应优先级高的任务先执行。
四、实现抢占式调度和响应式调度的代码示例
下面是一个使用抢占式调度的代码示例:
voidtask_1(){while(true){//dosomething}}voidtask_2(){while(true){//dosomething}}voidscheduler(){if(task_1.priority>task_2.priority){task_1.run();task_2.block();}else{task_2.run();task_1.block();}}intmain(){//settaskprioritytask_1.priority=1;task_2.priority=2;while(true){scheduler();}}
下面是一个使用响应式调度的代码示例:
voidtask_1(){while(true){//dosomething}}voidtask_2(){while(true){//dosomething}}voidscheduler(){if(task_1.response_priority>task_2.response_priority){task_1.run();task_2.block();}else{task_2.run();task_1.block();}}intmain(){//settaskresponseprioritytask_1.response_priority=1;task_2.response_priority=2;while(true){scheduler();}}