Lev*_*Lev 3 mutex smart-pointers rust interior-mutability
如果Mutex<T>设计Arc<T>使用a的唯一原因Mutex<T>是用于并发代码(即多个线程),为什么还要设计一个?首先将a别名Mutex<T>为原子引用会更好吗?我正在使用https://doc.rust-lang.org/book/ch16-03-shared-state.html作为参考。
hel*_*low 10
您不需要Arc使用即可Mutex。lock(上最常用的方法Mutex)的签名pub fn lock(&self) -> LockResult<MutexGuard<T>>意味着您需要引用Mutex。
借阅检查器出现问题。当传递对线程的引用时,它可能无法证明某些保证,而这些引用可能会超过原始线程Mutex。因此,您使用Arc它可以保证内部价值与生命一样长久Arc。
use lazy_static::lazy_static; // 1.3.0
use std::sync::Mutex;
use std::thread::spawn;
lazy_static! {
static ref M: Mutex<u32> = Mutex::new(5);
}
fn a(m: &Mutex<u32>) {
println!("{}", m.lock().unwrap());
}
fn b(m: &Mutex<u32>) {
println!("{}", m.lock().unwrap());
}
fn main() {
let t1 = spawn(|| a(&M));
let t2 = spawn(|| b(&M));
t1.join().unwrap();
t2.join().unwrap();
}
Run Code Online (Sandbox Code Playgroud)
(游乐场)