3.2.3 Drop Guard
03-Drop Guard — Comprehensive Rust
1分钟内可阅读完
译文 · 基于 Comprehensive Rust
3.2.3 Drop Guard
Rust 中的 drop guard 是一个临时对象,在离开作用域时执行某种清理。对于 Mutex,lock 方法返回一个 MutexGuard,在 drop 时自动解锁互斥锁:
| |
上例展示了简化版的
Mutex及其关联的 guard。尽管不是生产就绪的实现,它说明了核心思想:
- guard 代表独占访问,
- 其
Drop实现在离开作用域时释放锁。深入探索
本示例展示的是 C++ 风格的互斥锁:不包含它所保护的数据。这在 Rust 中并不地道,此处目标只是说明 drop guard 的核心思想,而非演示正确的 Rust 互斥锁设计。
为简洁起见,省略了若干特性:
- 真正的
Mutex<T>把受保护的值存在互斥锁内部。
这个玩具示例完全省略了该值,只聚焦 drop guard 机制。- 通过
MutexGuard上的Deref与DerefMut提供符合人体工学的访问(让 guard 表现得像&T或&mut T)。- 完整的阻塞式
.lock()方法以及非阻塞的try_lock变体。可参考 Rust 标准库中的
Mutex实现 作为生产就绪互斥锁的例子。parking_lotcrate 中的Mutex也是值得一看的参考。