原子引用计数Arc<T>
把Rc改成Arc就可以实现线程之间共享数据。
use std::thread;
use std::sync::Mutex;
use std::sync::Arc;
use std::time;
fn main() {
//
// let counter=Mutex::new(12);
let counter=Arc::new(Mutex::new(12));
// let another=counter;
// println!("{:?}",counter);
let mut threadRes=vec![];
for i in 0..10{
// 定义线程的闭包
let counter=Arc::clone(&counter);
let handle=thread::spawn(move ||{
// 获取互斥量
{
let mut num=counter.lock().unwrap();
*num+=1;
println!("{:?}",i);
thread::sleep(time::Duration::from_millis(10));
thread::sleep(time::Duration::from_millis(10));
println!("{:?}",i);
}
// thread::sleep(time::Duration::from_millis(10));
// println!("{:?}",i);
// 不用执行unlock,离开作用域之后,自动释放锁
});
threadRes.push(handle);
}
for handle in threadRes{
handle.join();
}
println!("{:?}",counter.lock().unwrap());
// for i in 0..10{
// threadRes[i].join();
// }
println!("Hello, world!");
}
Send
和Sync
的trait
这一部分明天再学习。