2.13.2 互斥:硬件方法
中断禁用(屏蔽中断)
- 用于单CPU系统
- 使用屏蔽中断的方法,屏蔽时无法切换进程,达到进程互斥的目的
while (true ) {
disable interrupt //屏蔽中断
critical section //临界区
enable interrupt //启用中断
remainder //其余部分
}
评价
- 显而易见的效率低
- 屏蔽期间无法响应外部请求
- 无法切换进程
- 无法工作在多处理器环境
专用机器指令
- 处理器设计者指定的两种机器指令,在一个指令周期中执行,不会被打断和受到其他指令干扰
- 也可用于多处理器环境
比较一个内存单元的值和测试值,相等则交换
int compare_and_swap(int *word, int testval, int newval){
int oldval;
oldval = *word;
if(oldval == testval) *word = newval;
return oldval;
}
原子性交换寄存器和内存的值
procedure exchange(var r: register; var m: memory);
var temp;
begin
temp := m;
m := r;
r := temp;
end
评价
优点
- 支持多处理器
- 简单易证明
- 支持多临界区
缺点
- 存在忙等
- 可能出现饥饿
- 可能出现死锁