| 项目 | 值 |
|---|---|
| 定义 | 用于保护临界区的锁,保证同一时刻只有一个线程访问 |
| 两种实现 | 自旋锁(忙等)、非自旋锁(阻塞) |
| 操作 | lock() 获取锁、unlock() 释放锁 |
| 适用场景 | 临界区短 → 自旋锁;临界区长 → 阻塞锁 |
互斥锁(Mutex Lock)是最基本的同步原语,用于保证同一时刻只有一个线程(或进程)可以进入临界区。
两种实现方式:
| 对比项 | 自旋锁 | 阻塞锁 |
|---|---|---|
| 等待方式 | 忙等(while 循环) | 阻塞(释放 CPU) |
| CPU 利用 | 低(忙等浪费) | 高(让出 CPU) |
| 上下文切换 | 无 | 有(切换开销) |
| 适用场景 | 临界区短 | 临界区长 |
| 多核优势 | 有(无切换开销) | 一般 |
| 考法 | 解题套路 |
|---|---|
| 自旋锁 vs 阻塞锁 | 临界区短 → 自旋锁;临界区长 → 阻塞锁 |
| lock/unlock 原子性 | acquire 和 release 必须是原子操作(用 TAS/CAS 实现) |
| 互斥锁 vs 信号量 | 互斥锁只允许一个线程进入;信号量可允许多个(计数信号量) |
| 死锁问题 | 同一线程两次 lock 同一 mutex → 死锁 |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。