帮我写一个Rust程序使用多线程相加一些数字
以下是一个使用多线程相加一些数字的Rust程序的示例:
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let numbers = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let sum = Arc::new(Mutex::new(0));
let mut handles = vec![];
for num in numbers {
let sum = Arc::clone(&sum);
let handle = thread::spawn(move || {
let mut current_sum = sum.lock().unwrap();
*current_sum += num;
});
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
let final_sum = *sum.lock().unwrap();
println!("Final sum: {}", final_sum);
}
在这个示例中,我们首先定义了一个包含一些数字的向量 numbers。然后,我们创建了一个共享可变的互斥锁 sum,并将其包装在一个原子引用计数类型 Arc 中,以便在多个线程之间共享。
接下来,我们使用 for 循环遍历 numbers 向量中的每个数字。在每个循环迭代中,我们克隆 sum,并在一个新线程中执行闭包。闭包会获取互斥锁的锁定,并将当前数字添加到总和中。
我们将每个线程的句柄存储在一个向量 handles 中,以便稍后使用 join 等待所有线程完成。
最后,我们使用 *sum.lock().unwrap() 解锁互斥锁,并将最终的和输出到控制台
原文地址: https://www.cveoy.top/t/topic/iQSI 著作权归作者所有。请勿转载和采集!