Rust并发编程番外篇: Mutex内部实现
💡
原文中文,约4600字,阅读约需11分钟。
📝
内容提要
本文介绍了 Rust 标准库中 Mutex 的实现,它是一种同步原语,提供了互斥锁的功能。Mutex 包含三个字段,内部实现的锁、poison 标记和 data 存储被保护的数据。另外一个关联的数据结构是 MutexGuard,它是 Mutex 的一个智能指针,用来管理锁的生命周期。
🎯
关键要点
-
Mutex是最常用的同步原语,提供互斥锁功能,保护共享数据。
-
Mutex包含三个字段:内部实现的锁、poison标记和存储被保护的数据。
-
MutexGuard是Mutex的智能指针,管理锁的生命周期,自动释放锁。
-
请求锁时,调用内部的sys::Mutex上锁,返回LockResult,包含MutexGuard。
-
MutexGuard实现了Deref和Drop,支持解引用和自动释放锁。
-
try_lock方法尝试获取锁,返回TryLockResult。
-
inner的类型是sys::Mutex,根据操作系统不同有不同实现,Linux使用futex_mutex。
-
futex_mutex使用futex_wait和futex_wake系统调用,表示锁的状态有三种:未加锁、加锁且无等待、加锁且有等待。
-
锁的主要逻辑在inner实现,使用compare_exchange方法尝试加锁。
-
解锁时将锁的状态改为未加锁,并唤醒等待的线程。
🏷️
标签
➡️