tsl和cas

TSL是Test and Set Lock的缩写,是CPU提供的一个原子指令,其工作如下所述:它将一个存储器字读到一个寄存器中,然后在该内存地址上存一个非零值。读数和写数操作保证是不可分割的——即该指令结束之前其他处理机均不允许访问该存储器字。执行TSL指令的CPU将锁住内存总线(实际是锁缓存)以禁止其他CPU在本指令结束之前访问内存。操作系统的Mutex的加锁过程就是基于TSL指令实现的。

CAS是Compare and Swap的缩写,是CPU提供的另一个原子指令,它需要三个参数:内存地址,旧值、新值。指令首先比较内存地址中保存的值与旧值,若相同,则把新值写入内存地址;若不同,则指令执行失败。指令的执行过程是原子的,不可被中断的。

TSL和CAS的区别:

1. TSL实际上只操作一个比特位,而CAS操作的是由32个比特构成的字,因而相比CAS,TSL指令需要更少的寄存器且执行速度更快;

2. 基于TSL指令(加锁)和CAS指令(解锁)实现的Mutex在上锁和解锁时进程要从用户态切换到内核态,并可能伴随有线程的调度、上下文切换等,开销比较重,而进程调用CAS指令则无须从用户态切换到内核态。

 

参考博客:

1. https://www.cnblogs.com/XiaoHDeBlog/p/3740270.html Linux中同步互斥机制研究之原子操作

2. http://zy.swust.net.cn/02/2/czxt/chapter2/section2/TSL.htm TSL指令

3. https://www.jianshu.com/p/61490effab35 操作系统中锁的原理

4. https://www.jianshu.com/p/4d8e56461f7b 《操作系统概念》笔记 临界区问题 - TSL & mutex lock  重要

5. https://www.ibm.com/support/knowledgecenter/SSB23S_1.1.0.13/gtpc3/tasinst.html test and set

6. https://blog.csdn.net/zzulp/article/details/6259866 无锁编程与有锁编程的性能对比与分析

7. https://blog.csdn.net/Saintyyu/article/details/100838503 cas vs mutex

8. https://yq.aliyun.com/articles/20562 使用CAS实现无锁的SkipList

9. https://www.cnblogs.com/qingquanzi/p/8228422.html 自己动手写把”锁”---LockSupport深入浅出

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值