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

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值