临界区

  • 互斥
  • Progress
  • 有限等待
  • 无忙等待(可选):如果一个进程在等待进入临界区,那么在它可以进入之前会被挂起

方法一

  • 禁用硬件中断
    • 没有中断,没有上下文切换
      • 硬件将中断处理延迟到中断被启用之后
  • 缺点:
    • 可能导致其他线程处于饥饿状态
    • 无法限制响应中断所需的时间(临界区死循环,无限长)(可能存在硬件影响)
    • 不适合多cpu的情况

方法二

  • 依靠软件算法
  • 三个算法
  • Dekker算法(第一个针对双线程例子)
  • Bakery算法
  • 缺点
    • 对于多线程算法复杂,且开销较大

方法三

  • 高级抽象
  • 锁是更高级别的编程抽象
    • 互斥可以使用锁来实现
    • 通常需要一定的硬件的支持