From a37d39572f45240c899bd79894d8f86a35d76b0e Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Fri, 1 May 2020 21:20:13 +0800 Subject: [PATCH] sleep_sort --- thread/src/main.rs | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) 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!"); } + +