1
0
Fork 0
forked from AbleOS/ableos
ableos-idl/ableos/src/scheduler.rs

29 lines
613 B
Rust

use alloc::collections::VecDeque;
use spin::{Lazy, Mutex};
pub static SCHEDULER: Lazy<Mutex<Scheduler>> = Lazy::new(|| Mutex::new(Scheduler::default()));
pub enum Task {
Suspended(u64),
Spawn(fn()),
}
#[derive(Default)]
pub struct Scheduler {
task_queue: VecDeque<Task>,
}
impl Scheduler {
pub fn enqueue_spawn(&mut self, f: fn()) {
self.task_queue.push_back(Task::Spawn(f));
}
pub fn enqueue_suspended(&mut self, sp: u64) {
self.task_queue.push_back(Task::Suspended(sp));
}
pub fn pop(&mut self) -> Option<Task> {
self.task_queue.pop_front()
}
}