硬件同步机制中test-and-set指令和swap指令实现的详解

 

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  关中断
关中断是实现互斥最简单的方法之一,在访问临界区之前执行关中断,那么在访问临界区的时候就不去响应中断,从而不会引发调度,也就不会发生进程或者线程切换,但是滥用关中断可能会引发不可估计的后果,还会极大影响系统效率问题。

 

你可能感兴趣的:(操作系统)