多线程如果想同时访问并修改同一变量,那么,除了使用全局变量之外,还可以使用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