TSL和CAS

484 阅读1分钟

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指令则无须从用户态切换到内核态。

原文链接:blog.csdn.net/Saintyyu/ar…