1,725
社区成员




无论是Cell还是RefCell,都是单线程语义下达到内部可变性的能力。在多线程情况下,同样存在一个【不可变借用的内部成员变量可变】的需求。此时,就需要加锁,Rust的Mutext/RwLock不但实现了锁的能力,同时提供了多线程下内部可变性的能力。
use std::task;
use std::sync::{Mutex, RwLock}
struct Test{
x: u32
}
// 使用Arc涉及到 内部共享(`Internal sharing`),参考后面
let v = Arc::new(Mutex::new(Test{x:10}))
let v1 = v.clone();
task::spawn(async move {
// 解锁+获得不可变借用
let v = v1.lock().unwrap();
});
let v2 = v.clone();
task::spawn(async move {
// 解锁+获得可变借用
let mut v = v1.lock().unwrap();
});