首页 > 解决方案 > 如果我从不将 MutexGuard 分配给变量,它在哪里?

问题描述

我不明白MutexGuard内部代码块中的“在哪里”。互斥锁被锁定并展开,产生一个MutexGuard. 不知何故,这段代码设法取消引用该MutexGuard对象,然后可变地借用该对象。去哪儿了MutexGuard?此外,令人困惑的是,这种取消引用不能替换为deref_mut. 为什么?

use std::sync::Mutex;

fn main() {
    let x = Mutex::new(Vec::new());
    {
        let y: &mut Vec<_> = &mut *x.lock().unwrap();
        y.push(3);
        println!("{:?}, {:?}", x, y);
    }

    let z = &mut *x.lock().unwrap();
    println!("{:?}, {:?}", x, z);
}

标签: rustmutexmutability

解决方案



推荐阅读