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深入浅出
相关文章
- 想和中国空间站“同框”?超简单攻略来了
- 苹果iOS15.2测试版更新首次加入数字遗产功能
- 手机电池不耐用?学会六个省电小妙招,两天一充不是梦
- Watchdog机制源码分析
- 全球三大即时通讯工具,除了中国的微信,另外两个有多强?
- iOS 15.2 Beta 2发布:五个新变化!修复了最讨厌的Bug
- 避免被跟踪,苹果 iOS 15.2 Beta2 支持扫描附近的 AirTag
- 苹果发布iOS 15.2最新测试版:新增儿童通信安全功能!
- 苹果3nm芯片最快2023年问世:最高或集成40核CPU
- 手机内存空间不足怎么办?教你三个清理方法,瞬间清除十几G空间
- 更新iOS15.1仅12天:电池健康从92%掉到87%,iPhone XR惨遭负优化
- 研究了一波 Android Native C++ 内存泄漏的调试
- 支付宝借呗改名信用贷 借呗回应:已启动品牌隔离 服务不受影响
- 苹系统版本再更新,由iOS 14.6 迎来了iOS 15.2
- 教你四招,别为移动应用程序花冤枉钱!
- 截屏实现方式和监听截屏详解
- 苹果自曝全新OS:基于家庭的操作系统
- iPhone消息接收延迟怎么办?其实改个时区就不延迟了,很实用
- 苹果关闭 iOS 15.0.2 系统验证通道,升级 iOS 15.1 后无法降级
- 企业移动管理这十年|移动设备到底该归谁?