Scheduler

Trait Scheduler 

Source
pub trait Scheduler {
    // Required methods
    fn new() -> Self;
    fn add_task(&mut self, task: Arc<SpinLock<Task>>);
    fn next_task(&mut self) -> Option<SwitchPlan>;
    fn sleep_task(&mut self, task: Arc<SpinLock<Task>>, receive_signal: bool);
    fn wake_up(&mut self, task: Arc<SpinLock<Task>>);
    fn exit_task(&mut self, task: Arc<SpinLock<Task>>);
    fn sleep_task_with_guard(
        &mut self,
        task: &mut SpinLockGuard<'_, TaskStruct>,
        stask: Arc<SpinLock<Task>>,
        receive_signal: bool,
    );
}
Expand description

调度器接口定义 调度器负责决策和准备下一个任务的运行。 具体来说,它负责以下几项工作:

  1. 决策: 根据优先级、时间片、调度策略等算法,从运行队列中选择下一个要执行的任务。
  2. 队列维护: 维护任务的运行队列(Run Queue)。

Required Methods§

Source

fn new() -> Self

构造函数

Source

fn add_task(&mut self, task: Arc<SpinLock<Task>>)

添加任务到调度器 参数:

  • task: 需要添加的任务
Source

fn next_task(&mut self) -> Option<SwitchPlan>

选择下一个要运行的任务

§返回值

如果要切换到下一个任务,返回切换计划 SwitchPlan;否则返回 None

Source

fn sleep_task(&mut self, task: Arc<SpinLock<Task>>, receive_signal: bool)

任务阻塞 修改任务状态并从运行队列中移除 参数:

  • task: 需要阻塞的任务
  • receive_signal: 是否可被信号中断 注意: 该函数仅设置状态,不负责切换任务
Source

fn wake_up(&mut self, task: Arc<SpinLock<Task>>)

唤醒任务 修改任务状态并将其添加到运行队列 参数:

  • task: 需要唤醒的任务
Source

fn exit_task(&mut self, task: Arc<SpinLock<Task>>)

任务终止 修改任务状态并从调度器中移除 参数:

  • task: 需要终止的任务
Source

fn sleep_task_with_guard( &mut self, task: &mut SpinLockGuard<'_, TaskStruct>, stask: Arc<SpinLock<Task>>, receive_signal: bool, )

带保护地阻塞任务 修改任务状态并从运行队列中移除 参数:

  • task: 需要阻塞的任务(带锁保护)
  • stask: 需要阻塞的任务(共享指针)
  • receive_signal: 是否可被信号中断 HACK: 这个函数被设计用来避免信号处理过程中丢失唤醒的问题。 尽量不要使用该函数,除非你非常清楚自己在做什么

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§