mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-15 16:26:48 +00:00
33 lines
752 B
Rust
33 lines
752 B
Rust
use crate::prelude::*;
|
|
use jinux_frame::task::{set_scheduler, Scheduler, Task, TaskAdapter};
|
|
|
|
use intrusive_collections::LinkedList;
|
|
|
|
pub struct FifoScheduler {
|
|
tasks: Mutex<LinkedList<TaskAdapter>>,
|
|
}
|
|
|
|
impl FifoScheduler {
|
|
pub fn new() -> Self {
|
|
Self {
|
|
tasks: Mutex::new(LinkedList::new(TaskAdapter::new())),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Scheduler for FifoScheduler {
|
|
fn enqueue(&self, task: Arc<Task>) {
|
|
self.tasks.lock().push_back(task.clone());
|
|
}
|
|
|
|
fn dequeue(&self) -> Option<Arc<Task>> {
|
|
self.tasks.lock().pop_front()
|
|
}
|
|
}
|
|
|
|
pub fn init() {
|
|
let fifo_scheduler = Box::new(FifoScheduler::new());
|
|
let scheduler = Box::<FifoScheduler>::leak(fifo_scheduler);
|
|
set_scheduler(scheduler);
|
|
}
|