3.2.2 互斥锁
02-互斥锁 — Comprehensive Rust
1分钟内可阅读完
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/idiomatic/leveraging-the-type-system/raii/mutex.html
3.2.2 互斥锁
在先前的示例中,RAII 用于管理文件描述符等具体资源。对于 Mutex,「资源」是对值的可变访问。你通过调用 lock 访问该值,它返回一个 MutexGuard,在 drop 时会自动解锁 Mutex。
| |
Mutex控制对值的独占访问。与先前的 RAII 示例不同,这里的资源是逻辑上的:对内部数据的临时独占访问权。该权利由
MutexGuard表示。同一时刻只能存在一个针对该互斥锁的 guard。在它存活期间,提供&mut T访问。虽然
lock()接受&self,却返回带有可变访问的MutexGuard。这通过内部可变性(interior mutability)实现:类型在内部管理自己的借用规则,从而允许通过&self进行修改。
MutexGuard实现了Deref和DerefMut,使访问很符合人体工学。你锁定互斥锁,然后像使用&mut T一样使用 guard。互斥锁由
MutexGuard::drop()释放。你从不调用显式的 unlock 函数。