1 test-and-set详解
//注意 test-and-set是原语操作,3条指令必须一次执行完毕
boolean test-and-set(*lock)
{
boolean old=*lock;
*lock=true;
return old;
}
do{
while(test-and-set(*lock))
{
//你没有看错,里面啥也没有
}//当*lock为false是跳出该循环,为true是停留在这里
critical section;//临界区
*lock=false;
}while(true)
//上面硬件同步的test-and-set已经详解
2 swap详解
void swap(boolean *a,boolean *b)
{
boolean temp=*a;
*a=*b;
*b=temp;
}
do{
key=true;
do{
swap(&lock,&key);
}while(key)
//上面初值为false
cirtical section//临界区,访问临界资源的代码
lock=false;
}while(true)
3 关中断
关中断是实现互斥最简单的方法之一,在访问临界区之前执行关中断,那么在访问临界区的时候就不去响应中断,从而不会引发调度,也就不会发生进程或者线程切换,但是滥用关中断可能会引发不可估计的后果,还会极大影响系统效率问题。