use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let data: Vec<Option<Vec<u32>>> = vec![
Some(vec![1, 2, 3]),
None,
Some(vec![4, 5]),
];
let num_threads = 2;
let data_chunks: Vec<&[Option<Vec<u32>>]> = data.chunks((data.len() + num_threads - 1) / num_threads).collect();
let sum = Arc::new(Mutex::new(0));
let mut handles = Vec::new();
for chunk in data_chunks {
let sum_clone = Arc::clone(&sum);
let handle = thread::spawn(move || {
for option in chunk {
if let Some(nums) = option {
let mut local_sum = 0;
for num in nums {
local_sum += num;
}
let mut guard = sum_clone.lock().unwrap();
*guard += local_sum;
}
}
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
let result = sum.lock().unwrap();
println!("Total sum: {}", *result);
}