自旋鎖:是用于多線程同步的一種鎖霜旧,線程反復(fù)檢查鎖變量是否可用错忱。由于線程在這一過程中保持執(zhí)行,因此是一種忙等待。一旦獲取了自旋鎖以清,線程會一直保持該鎖儿普,直至顯式釋放自旋鎖。 自旋鎖避免了進(jìn)程上下文的調(diào)度開銷玖媚,因此對于線程只會阻塞很短時間的場合是有效的箕肃。
- OSSpinLock: 會造成優(yōu)先級反轉(zhuǎn)的問題婚脱,不再安全今魔。os_unfair_lock 是蘋果官方推薦的替換OSSpinLock的方案,但是它在iOS10.0以上的系統(tǒng)才可以調(diào)用障贸。os_unfair_lock是一種互斥鎖错森,它不會向自旋鎖那樣忙等,而是等待線程會休眠篮洁。
優(yōu)先級反轉(zhuǎn):比如我們有線程1和線程2,如果線程1的優(yōu)先級比較高涩维,那么分配給這個線程的時間就比較多,自旋鎖就會發(fā)生優(yōu)先級反轉(zhuǎn)的問題袁波,比如優(yōu)先級比較低的線程2先進(jìn)去瓦阐,那么線程2先加鎖了,緊接著線程1進(jìn)來了篷牌,發(fā)現(xiàn)已經(jīng)被加鎖了睡蟋,那么線程1忙等,while(未解鎖); 不斷的等待枷颊,由于線程1的優(yōu)先級比較高戳杀,CPU就一直分配時間給線程1,就沒有時間分配給線程2夭苗,就有可能導(dǎo)致線程2的代碼就沒有辦法往下走信卡,就會造成線程2沒有辦法解鎖,所以這個鎖就不安全了题造。
互斥鎖(Mutex):是一種用于多線程編程中傍菇,防止兩條線程同時對同一公共資源(比如全局變量)進(jìn)行讀寫的機(jī)制。該目的通過將代碼切片成一個一個的臨界區(qū)而達(dá)成界赔。
- NSLock
- pthread_mutex
- @synchronized : 是NSLock的一種封裝
- NSConditionLock(NSLock的子類)