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
调度器接口定义 调度器负责决策和准备下一个任务的运行。 具体来说,它负责以下几项工作:
- 决策: 根据优先级、时间片、调度策略等算法,从运行队列中选择下一个要执行的任务。
- 队列维护: 维护任务的运行队列(Run Queue)。
Required Methods§
Sourcefn next_task(&mut self) -> Option<SwitchPlan>
fn next_task(&mut self) -> Option<SwitchPlan>
Sourcefn sleep_task(&mut self, task: Arc<SpinLock<Task>>, receive_signal: bool)
fn sleep_task(&mut self, task: Arc<SpinLock<Task>>, receive_signal: bool)
任务阻塞 修改任务状态并从运行队列中移除 参数:
task: 需要阻塞的任务receive_signal: 是否可被信号中断 注意: 该函数仅设置状态,不负责切换任务
Sourcefn sleep_task_with_guard(
&mut self,
task: &mut SpinLockGuard<'_, TaskStruct>,
stask: Arc<SpinLock<Task>>,
receive_signal: bool,
)
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.