文章目录
软件方法
内存访问级
- 设置一个全局变量来标记临界区是否空闲(flag = 1 || 0);
- 需要一个仲裁程序来判定进程是否进入临界区;
- Dekker‘s Algorithm,Peterson’s Algotithm;
- 能够解决两个进程的互斥;
- 需要较高的额外开销;
- 很容易出现逻辑错误;
硬件方法
屏蔽中断
- 一个进程一直执行到被中断 或 是执行完毕自行退出;
- 屏蔽掉系统中断后,就能保证其不会被系统中断其独占已经拿到的资源;
- 代价及其高;
- 在多处理机系统中,屏蔽一个处理器的中断,并不会阻止其他处理器上的进程来竞争资源;
步骤
屏蔽中断 -> 进入临界区 -> 开启中断
所以,如果进入临界区的进程使用时间过长,对于系统的危害是非常大的;
专用机器指令
- 机器指令会在一个指令周期内执行(在一个指令周期之间是没有中断点的,但是DMA是可以在机器指令中间中断的);
- 一个指令周期和另一个指令就避免了冲突;
- 读 和 写;
- 读 和 测试;