Dzwebs.Net

撰写电脑技术杂文十余年

rust之thread多线程同时共享变量及修改变量的方法(Arc,Mutex)

Admin | 2023-3-9 14:44:13 | 被阅次数 | 1752

温馨提示!

如果未能解决您的问题,请点击搜索;登陆可复制文章,点击登陆

  多线程如果想同时访问并修改同一变量,那么,除了使用全局变量之外,还可以使用Arc,Mutex这两个来实现,下面是代码。

  use std::sync::{Mutex,Arc};

use std::thread;


fn main(){
    let counter=Arc::new(Mutex::new(0));
    let mut handles=vec![];
    for i in 1..=10{
        let m=Arc::clone(&counter);
        let handle=thread::spawn(move||{
            let mut num=m.lock().unwrap();
            *num+=1;
println!("第 {} 个线程",i);
        });
        handles.push(handle);
    }

println!("总线程是什么内容呢?{:#?}",&handles);

    for handle in handles{
        handle.join().unwrap();
    }
    println!("Result:{}",*counter.lock().unwrap());

}

  代码运行后输出如下内容

  第 1 个线程
第 2 个线程
第 7 个线程
第 6 个线程
总线程是什么内容呢?[
    JoinHandle { .. },
    JoinHandle { .. },
    JoinHandle { .. },
    JoinHandle { .. },
    JoinHandle { .. },
    JoinHandle { .. },
    JoinHandle { .. },
    JoinHandle { .. },
    JoinHandle { .. },
    JoinHandle { .. },
]
第 9 个线程
第 4 个线程
第 5 个线程
第 10 个线程
第 3 个线程
第 8 个线程
Result:10

  知识拓展:想了解全局变量,请参阅下面两篇文章

http://www.dzwebs.net/5705.html

http://www.dzwebs.net/5704.html


该杂文来自: 最新技术

上一篇:rust之map,iter,filter,collect,sum的多种形式的

下一篇:rust tokio多线程异步查询sqlite数据库示例

网站备案号:

网站备案号:滇ICP备11001339号-7

版权属性:

Copyright 2007-2021-forever Inc. all Rights Reserved.

联系方式:

Email:dzwebs@126.com QQ:83539231 访问统计