⾃旋锁(spinlock):是指当⼀个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。
⾃旋锁与互斥锁⽐较类似,它们都是为了解决对某项资源的互斥使⽤。⽆论是互斥锁,还是⾃旋锁,在任何时刻,最多只能有⼀个保持者,也就说,在任何时刻最多只能有⼀个执⾏单元获得锁。
对于互斥锁,会让没有得到锁资源的线程进⼊BLOCKED状态,⽽后在争夺到锁资源后恢复为RUNNABLE状态,这个过程中涉及到操作系统⽤户模式和内核模式的转换,代价⽐较⾼。但是⾃旋锁不会引起调⽤者堵塞,如果⾃旋锁已经被别的执⾏单元保持,调⽤者就⼀直循环在那⾥看是否该⾃旋锁的保持者已经释放了锁。
⾃旋锁的实现基础是CAS算法机制。CAS⾃旋锁属于乐观锁,乐观地认为程序中的并发情况不那么严重,所以让线程不断去尝试更新。
标签:旋锁,保持者,获取,CAS,互斥,线程,自旋 From: https://www.cnblogs.com/lin513/p/17897989.html