為什么使用spinlock?
、spinlock 簡介自旋鎖(spinlock):是指當(dāng)一個線程在獲取鎖的時候,如果鎖已經(jīng)被其它線程獲取,那么該線程將循環(huán)等待,不斷嘗試獲取鎖,直到獲取到鎖才會退出循環(huán)
二、自旋鎖與互斥鎖的區(qū)別
自旋鎖與互斥鎖類似,它們都是為了解決對某項(xiàng)資源的互斥使用,在任何時刻最多只能有一個線程獲得鎖
對于互斥鎖,如果資源已經(jīng)被占用,調(diào)用者將進(jìn)入睡眠狀態(tài)
對于自旋鎖,如果資源已經(jīng)被占用,調(diào)用者就一直循環(huán)在那里,看是否自旋鎖的保持者已經(jīng)釋放了鎖
三、自旋鎖的優(yōu)缺點(diǎn)
自旋鎖不會使線程狀態(tài)發(fā)生切換,不會使線程進(jìn)入阻塞狀態(tài),減少了不必要的上下文切換,執(zhí)行速度快。非自旋鎖在獲取不到鎖的時候會進(jìn)入阻塞狀態(tài),從而進(jìn)入內(nèi)核態(tài),當(dāng)獲取到鎖的時候需要從內(nèi)核態(tài)恢復(fù),需要線程上下文切換,影響性能
如果某個線程持有鎖的時間過長,就會導(dǎo)致其它等待獲取鎖的線程長時間循環(huán)等待消耗CPU,造成CPU使用率極高