以下是一个使用多线程相加一些数字的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() 解锁互斥锁,并将最终的和输出到控制台

帮我写一个Rust程序使用多线程相加一些数字

原文地址: https://www.cveoy.top/t/topic/iQSI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录