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方法尝试加锁。

  • 解锁时将锁的状态改为未加锁,并唤醒等待的线程。

➡️

继续阅读