互斥锁学习卡片
- 互斥锁是实现进程互斥的最简单工具
- 通过布尔变量available表示锁状态:
- true/1: 锁可用(未上锁)
- false/0: 锁不可用(已上锁)
- 关键操作:
- acquire(): 获取锁,将available设为false
- release(): 释放锁,将available设为true
- 原子性要求: 获取和释放锁的操作必须通过硬件机制保证原子性执行
- 当锁不可用时,进程会在acquire()中循环检查(while(!available)),直到锁被释放
- 主要缺点:
- 违反"让权等待"原则,持续占用CPU资源
- 在单处理机系统中尤其低效
- 适用场景:
- 多处理器系统: 一个核忙等不影响其他核工作
- 临界区操作时间短时效率更高(避免上下文切换开销)
- 包括TSL指令、swap指令、单标志法等实现方式
- 共同特征:都需要忙等待检查锁状态
- 性能权衡:
- 优势: 不切换上下文,多核系统中若临界区操作快,总等待时间可能短于进程切换时间
- 典型应用: 内核数据结构保护等短时操作场景
- 优点:
- 无上下文切换代价
- 适合短临界区
- 缺点:
- CPU空转浪费资源
- 考试重点:
- 自旋锁vs阻塞锁的代价差异
- 多核并行能力与临界区时长的权衡