Week5 Done

This commit is contained in:
ridethepig 2023-03-07 15:10:52 +00:00
parent 67eb2bcdfb
commit 4653d577e4

View File

@ -70,13 +70,30 @@ fn main() {
let num_threads = num_cpus::get(); let num_threads = num_cpus::get();
println!("Farm starting on {} CPUs", num_threads); println!("Farm starting on {} CPUs", num_threads);
let start = Instant::now(); let start = Instant::now();
let mut thread_handles = Vec::new();
// call get_input_numbers() and store a queue of numbers to factor
let input_numbers = Arc::new(Mutex::new(get_input_numbers()));
// TODO: call get_input_numbers() and store a queue of numbers to factor // spawn `num_threads` threads, each of which pops numbers off the queue and calls
// TODO: spawn `num_threads` threads, each of which pops numbers off the queue and calls
// factor_number() until the queue is empty // factor_number() until the queue is empty
for _ in 0..num_threads {
let input_numbers = Arc::clone(&input_numbers);
let handle = thread::spawn(move || loop {
let mut queue = input_numbers.lock().unwrap();
let to_factor = queue.pop_front();
drop(queue);
if let Some(to_factor) = to_factor {
factor_number(to_factor);
} else {
break;
}
});
thread_handles.push(handle);
}
// TODO: join all the threads you created // join all the threads you created
for hndl in thread_handles {
hndl.join().unwrap();
}
println!("Total execution time: {:?}", start.elapsed()); println!("Total execution time: {:?}", start.elapsed());
} }