自旋锁有害
来源:matklad.github.io — 2020-01-02
📋 概述
作者作为 once_cell 的维护者,反对“为了支持 #[no_std] 就把 std 的 Mutex 换成自旋锁”这一生态惯性。自旋锁完全在用户态实现,从操作系统视角看,自旋线程与跑重计算的线程毫无区别,因此无法让出 CPU;在单核或优先级反转的场景下会造成严重问题。文章借此展开对优先级反转、CPU 中断与若干 Rust 系统编程技巧的讨论。
🔑 核心要点
- 反对的惯性模式:为支持 #[no_std] 就把 Mutex 换成自旋锁
- 自旋锁完全实现在用户态,操作系统看起来与忙碌线程无异
- 基于 OS 的 mutex 会用系统调用让线程被阻塞并让出 CPU
- lazy_static 等 crate 正是采用这种自旋锁替换的做法,作者称之为反模式
- 文章还讨论优先级反转与 CPU 中断及若干 Rust 系统编程技巧
💡 金句
我认为这是一种反模式,写这篇博客就是要把它点出来。
👍 0
👎 0
← 返回 Lobsters 首页