互斥锁学习卡片

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