45 lines
802 B
Rust
45 lines
802 B
Rust
#![no_std]
|
|
#![no_main]
|
|
|
|
#[macro_use]
|
|
extern crate user_lib;
|
|
extern crate alloc;
|
|
|
|
use alloc::vec;
|
|
use user_lib::{exit, thread_create, waittid};
|
|
|
|
pub fn thread_a() -> ! {
|
|
for _ in 0..1000 {
|
|
print!("a");
|
|
}
|
|
exit(1)
|
|
}
|
|
|
|
pub fn thread_b() -> ! {
|
|
for _ in 0..1000 {
|
|
print!("b");
|
|
}
|
|
exit(2)
|
|
}
|
|
|
|
pub fn thread_c() -> ! {
|
|
for _ in 0..1000 {
|
|
print!("c");
|
|
}
|
|
exit(3)
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub fn main() -> i32 {
|
|
let v = vec![
|
|
thread_create(thread_a as usize, 0),
|
|
thread_create(thread_b as usize, 0),
|
|
thread_create(thread_c as usize, 0),
|
|
];
|
|
for tid in v.iter() {
|
|
let exit_code = waittid(*tid as usize);
|
|
println!("thread#{} exited with code {}", tid, exit_code);
|
|
}
|
|
println!("main thread exited.");
|
|
0
|
|
}
|