diff --git a/thread/src/main.rs b/thread/src/main.rs index 90609d8..d7249f3 100644 --- a/thread/src/main.rs +++ b/thread/src/main.rs @@ -1,14 +1,19 @@ -use std::{ thread, time::Duration, }; +use std::{ + thread, + sync::{ Arc, Mutex, }, + time::Duration, +}; -// sleep sort -fn main() { - let in_vec = vec![2, 1, 5, 10, 7]; +fn sleep_sort(in_vec: Vec) -> Vec { + 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)); - println!(">> {}", i); + thread::sleep(Duration::from_millis(i as u64)); + let mut v = o_vec.lock().unwrap(); + v.push(i); }); all_threads.push(child); } @@ -16,5 +21,18 @@ fn main() { 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!"); } + +