# 自旋锁

> 自旋锁是计算机科学用于多线程同步的一种锁，线程反复检查锁变量是否可用。由于线程在这一过程中保持执行，因此是一种忙等待。一旦获取了自旋锁，线程会一直保持该锁，直至显式释放自旋锁。自旋锁避免了进程上下文的调度开销，因此对于线程只会阻塞很短时间的场合是有效的。因此操作系统的实现在很多地方往往用自旋锁。Windows操作系统提供的轻型读写锁（SRW Lock）内部就用了自旋锁。

- ID: m06297
- 分类: system
- 领域: 系统论

## 定义

线程在等待资源时，不释放CPU进入睡眠，而是通过一个死循环（Spin）不断检查“锁解开了吗？”。适用于等待时间极短的场景，省去了上下文切换的开销。脚手架作用： 短时等待的策略。如果预判等待时间很短（如等电梯、等回复），“原地打转”（刷手机等待）比“切换任务”（回办公室干活再来）更高效。但如果误判了时间，自旋锁会严重浪费资源（空转）。

## 机制

线程获取不到锁时，不睡眠而循环忙等（spin），避免上下文切换开销；适用于临界区极短、多核场景。

## 练习

1）仅在等待极短且多核下使用；2）临界区内不做阻塞操作；3）考虑公平性/超时；4）在单核或长等待下改用睡眠锁/互斥量。

## 脚手架用法

短时等待的策略。如果预判等待时间很短（如等电梯、等回复），“原地打转”（刷手机等待）比“切换任务”（回办公室干活再来）更高效。但如果误判了时间，自旋锁会严重浪费资源（空转）。

[阅读网页](https://thinkingmodels.site/entries/detail/m06297)
