原子类型
原子类型
原子类型是最简单的控制共享资源访问的一种机制,相比较于后面将介绍的锁而言,原子类型不需要开发者处理加锁和释放锁的问题,同时支持修改,读取等操作,还具备较高的并发性能,从硬件到操作系统,到各个语言,基本都支持。在标准库 std::sync::atomic
中,你将在里面看到AtomicBool
,AtomicIsize
,AtomicPtr
,AtomicUsize
。这
use std::thread;
use std::sync::Arc;
use std::sync::atomic::{AtomicUsize, Ordering};
fn main() {
let var : Arc<AtomicUsize> = Arc::new(AtomicUsize::new(5));
let share_var = var.clone();
// 创建一个新线程
let new_thread = thread::spawn(move|| {
println!("share value in new thread: {}", share_var.load(Ordering::SeqCst));
// 修改值
share_var.store(9, Ordering::SeqCst);
});
// 等待新建线程先执行
new_thread.join().unwrap();
println!("share value in main thread: {}", var.load(Ordering::SeqCst));
}
share value in new thread: 5
share value in main thread: 9
结果表明新建线程成功的修改了值,并在主线程中获取到了最新值,你也可以尝试使用其他的原子类型。此处我们可以思考一下,如果我们用Arc::new(*mut Box)
是否也可以做到? 为什么? 思考后,大家将体会到