临界区
- 互斥
- Progress
- 有限等待
- 无忙等待(可选):如果一个进程在等待进入临界区,那么在它可以进入之前会被挂起
方法一
- 禁用硬件中断
- 没有中断,没有上下文切换
- 硬件将中断处理延迟到中断被启用之后
- 没有中断,没有上下文切换
- 缺点:
- 可能导致其他线程处于饥饿状态
- 无法限制响应中断所需的时间(临界区死循环,无限长)(可能存在硬件影响)
- 不适合多cpu的情况
方法二
- 依靠软件算法
- 三个算法
- Dekker算法(第一个针对双线程例子)
- Bakery算法
- 缺点
- 对于多线程算法复杂,且开销较大
方法三
- 高级抽象
- 锁是更高级别的编程抽象
- 互斥可以使用锁来实现
- 通常需要一定的硬件的支持
