zl程序教程

您现在的位置是:首页 >  其他

当前栏目

tsl和cas

2023-03-15 22:00:49 时间

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深入浅出