【线程篇】原子操作

原子操作?是怎么实现?《从哲学层次看操作系统》--锁的实现

不可被中断的一个或一系列操作

32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。

1.禁止/开启中断

中断的启用和禁止是原子的,不能被其他代码插入的

  lock(){

 

           disable interrupt;//禁止中断

 

           while(value!=free){

 

                 enable interrupt;//启动中断

 

                 disable interrunpt ;//使其他线程可以抢占,从而改变value的值

 

           }

 

          value=busy;

 

          enable interrupt;

 

   }

2.测试与设置 特殊指令

将内存指定位置对的存储单元读到一个寄存器,将新的值写到刚才的存储单元

TAS就是Test And Set。它要做的就是跟一个变量进行Test。如果条件满足对其Set另外一个值,如果条件不满足,就继续等待。但是所有这些都是原子操作。

test_and_set(x){

 

            tmp=x;

 

            x=1;

 

           return (tmp);

 

   }

value is initially 0;//值初始为0

 

lock(){

 

    while(test_and_lock(1)==1) {} //每次执行完原子操作后都有可能会被抢占 

 

}

unlock(){

 

    value=0;//  因为是赋值0,可以直接在总线上产生,不用中断包裹着也没有问题                                                                          

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值