TS 指令

「硬件指令法」是一种临界区管理方法,即让一条机器硬件指令完成读写两个操作。执行硬件指令的 CPU 封锁内存总线,以禁止其他 CPU 在该指令完成前访问内存。硬件指令的执行过程中不响应中断,CPU 在微指令结束时才去检测是否有中断信号。

img-2024-05-17 20-48-05.png

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

特点

优点:

  • 不但适用于单处理器情况,而且适用于共享主存的 SMP 多处理器情况(即对称多处理器);
  • 方法简单,行而有效;
  • 可以被使用于多重临界段情况,每个临界段可以定义自己的共享变量。

缺点:

上述硬件指令虽然可以有效的保证进程间互斥,但是进程在临界段中执行时,其他想进入临界段的进程必须不断地检测布尔变量 lock 的值,这就造成了处理时机的浪费,通常称这种情况为“忙等待”