「硬件指令法」是一种临界区管理方法,即让一条机器硬件指令完成读写两个操作。执行硬件指令的 CPU 封锁内存总线,以禁止其他 CPU 在该指令完成前访问内存。硬件指令的执行过程中不响应中断,CPU 在微指令结束时才去检测是否有中断信号。
TS 的指令定义如下
bool TS(bool & x){
if (x){
x=false;
return true;
}
else
return false;
}
TS 指令管理临界区时,可把一个临界区与一个布尔变量 s 相连,由于变量 s 代表了临界资源的状态,可将其看做一把锁。因此可以用 TS 指令实现进程互斥,例如
bool s=true;
cobegin
process Pi() {
while(!TS(s)); // 上锁
// 临界区
s=true; // 开锁
}
coend
例如执行对换指令时:
void SWAP(bool &a, bool &b) {
bool temp=a;
a=b;
b=temp
}
以此可以实现进程互斥
bool lock=false;
cobegin
Process Pi(){
bool keyi=true;
do {
SWAP(keyi,lock);
}
while(keyi); // 上锁
// 临界区
SWAP(keyi,lock); // 开锁
}
coend
优点:
缺点:
上述硬件指令虽然可以有效的保证进程间互斥,但是进程在临界段中执行时,其他想进入临界段的进程必须不断地检测布尔变量 lock 的值,这就造成了处理时机的浪费,通常称这种情况为“忙等待”