- 软件实现法
- 单标志法:
- 设置公共bool变量turn
- p1完成后p2阻塞,不能做到空闲让进
- 双标志先检查法
- bool的数组flag[2],初始值为false,flag[0]=true表示p1允许进入临界区
- p1和p2同时进入临界区,不能做到忙则等待
- 双标志,先修改后检查
- 先赋值操作,表示自己想要进入临界区
- 并发进入,导致都在while循环,产生饥饿
- Peterson’s算法
- 先修改,后检查,后修改者等待。
- turn的值收到并发执行速度有关,turn值先变1再变0,根据后修改者等待原则,p1执行p2等待
- 该方法实现了空闲让进和忙则等待
- 单标志法:
- 硬件实现法
- 禁止中断
- 专用机器指令
- TS指令
- swap指令
- 禁止中断