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 来实现互斥
- 优点:效率较高,适用于多处理器系统
- 忙等待
- 自旋锁
- 适用于多处理器系统
- 通过循环检查锁的状态来实现互斥
- 优点:适用于临界区较短的情况,减少了上下文切换的开销
- 忙等待
- 信号量机制
- 适用于多进程系统
- 通过信号量来实现进程间的同步和互斥
- 优点:适用于复杂的同步场景,避免了忙等待
- 让权等待
- 管程
- 适用于多进程系统
- 通过封装共享资源和操作来实现互斥和同步
- 优点:提高了程序的结构化程度,避免了忙等待
- 让权等待