T27 各种同步互斥方法的比较与分析

  • 单标志法
    • 违反空闲让进
  • 双标志法先检查法
    • 违反忙则等待
  • 双标志法后检查法
    • 违反“空闲让进”和“有限等待”,导致进程饥饿
  • Peterson 方法
    • 适用于两个进程的互斥
    • 通过两个变量 flag[i]turn 实现
      • flag[i] 表示进程 i 想要进入临界区
      • turn 表示轮到哪个进程进入临界区
    • 优点:简单且有效,满足互斥、进程无饥饿有限等待条件
    • 缺点:仅适用于两个进程,无法扩展到多个进程
    • 伪代码示例:
    // 进程 i 的代码
    flag[i] = true;          // 表示进程 i 想要进入临界区
    turn = j;                // 让另一个进程先行
    while (flag[j] && turn == j); // 等待另一个进程完成
    // 临界区
    ...
    flag[i] = false;         // 离开临界区
  • 硬件方法
    • 中断屏蔽法
      • 适用于单处理器系统
      • 通过禁止中断来实现临界区的互斥访问
      • 缺点:限制了系统的响应能力,不适用于多处理器系统
      • 忙等待
    • TestAndSet 方法
      • 适用于多处理器系统
      • 使用原子操作 TestAndSet 来实现互斥
      • 优点:效率较高,适用于多处理器系统
      • 忙等待
    • Swap 方法
      • 适用于多处理器系统
      • 使用原子操作 Swap 来实现互斥
      • 优点:效率较高,适用于多处理器系统
      • 忙等待
    • 自旋锁
      • 适用于多处理器系统
      • 通过循环检查锁的状态来实现互斥
      • 优点:适用于临界区较短的情况,减少了上下文切换的开销
      • 忙等待
  • 信号量机制
    • 适用于多进程系统
    • 通过信号量来实现进程间的同步和互斥
    • 优点:适用于复杂的同步场景,避免了忙等待
    • 让权等待
  • 管程
    • 适用于多进程系统
    • 通过封装共享资源和操作来实现互斥和同步
    • 优点:提高了程序的结构化程度,避免了忙等待
    • 让权等待