自旋锁通过cpu提供的CAS函数(compare and swap), 在用户态<br>完成加锁和解锁操作,不主动产生线程上下文切换, 所以相比互斥锁来说<br>会快一些,开销也小一些。
加锁包含2个步骤:1.查看锁状态,如果锁是空闲的,则执行第二步<br>2.将锁设置为当前线程持有;<br> CAS将这2个步骤合并成一条硬件级指令,形成原子指令,这样保证2个步骤<br>不可分割,要么不执行,要么都执行完。<br><br>
当使用自旋锁时候,发生多线程竞争情况下, 加锁失败的线程会忙等待,直到它拿到锁,
自旋锁是比较简单的一种锁,开销小,多核系统下一般不会主动产生线程切换,适合异步,协程等<br>在用户态请求的编程方式,但是如果被锁住的代码执行时间较长,自旋锁会<br>长时间占用cpu资源,所以自旋的时间和被锁住的代码执行时间是成正比的。<br><br>