| | 实现互斥的四个原则 | 主要特点 |
| | 空闲让进 | 忙则等待 | 有限等待 | 让权等待 |
软件方法 | 单标志法 | ❌ | | | | turn = 1/0 |
双标志先检查法 | | ❌ | | | flag[i] = true/flase |
双标志后检查法 | ❌ | | ❌ | | flag[i] = true/flase |
Perterson法 | | | | ❌ | turn = 1/0 flag[i] = true/flase |
硬件方法 | 关中断 | | | | | 不适用多处理机 关中断权限交给用户实施不明智的 |
TS方法 | | | | ❌ | 硬件指令实现检查与设置成为一个原子操作 |
Swap方法 | | | | ❌ | 硬件指令实现检查与设置成为一个原子操作 |
互斥锁 | 互斥锁 | | | | ❌ | acquire() release() |
信号量 | 整形信号量 | | | | ❌ | wait()---P signal()---V |
记录型信号量 | | | | | wait()---P signal()---V value:资源数目 vector<>L:暂存需要资源的队列 |
对于软件方法由这样的记忆和理解方法:你和同学需要用浴室:单标志法: 到我了吗? while(turn!=0);双标志先检查法: 你要用吗?你不用我就用了! while(flag[1]);flag[0]=true双标志后检查法: 我想用!你要用吗(你要用我就等等) flag[0]=true while(flag[1]);Perterson法: 我想用!轮到你了!什么时候对方不用并且轮到我? flag[0]=true turn=1, while(flag[1]&&turn=1);