Files
simple-rust-tests/__std/thread/src/main.rs
2020-10-17 11:53:39 +08:00

39 lines
785 B
Rust

use std::{
thread,
sync::{ Arc, Mutex, },
time::Duration,
};
fn sleep_sort(in_vec: Vec<u8>) -> Vec<u8> {
let out_vec = Arc::new(Mutex::new(vec![]));
let mut all_threads = vec![];
for i in in_vec {
let o_vec = out_vec.clone();
let child = thread::spawn(move || {
thread::sleep(Duration::from_millis(i as u64));
let mut v = o_vec.lock().unwrap();
v.push(i);
});
all_threads.push(child);
}
for t in all_threads {
t.join().ok();
}
let v = out_vec.lock().unwrap();
v.to_vec()
}
// sleep sort
fn main() {
let in_vec = vec![2, 1, 5, 10, 7];
let out_vec = sleep_sort(in_vec);
out_vec.iter().for_each(|i| println!("{}", i));
println!("Finished!");
}