Rust中下划线模式赋值行为疑问:Mutex锁是否会立即释放?
Rust中
let _ = MutexGuard是否会立即释放锁? 核心差异在于变量绑定的方式,而非_本身的特性:
当使用
let _ = Mutex::lock().unwrap();时,Mutex::lock().unwrap()返回的MutexGuard是临时值,let _ = ...的写法会直接丢弃这个临时值,语句执行结束后就会触发drop,锁会立即释放,对应你看到的输出3121。当把已绑定的
_guard所有权转移给_时(比如let _ = _guard;),_会持有MutexGuard的所有权,它的生命周期会延续到当前作用域结束(比如main函数末尾),所以锁不会立即释放,直到作用域结束才会触发drop,对应输出321。
总结:
- 直接将表达式结果赋值给
let _ = ...:临时值语句结束后立即drop,锁立即释放; - 将已存在的
MutexGuard变量转移给_:_持有所有权到作用域结束,锁不会立即释放。
内容的提问来源于stack exchange,提问作者dpr
相关产品推荐
相关产品推荐

