iOS中的八大鎖解析與使用
iOS底層學(xué)習(xí)之八大鎖的分析
鎖的分類
- 自旋鎖 busy-waiting(忙等狀態(tài)):線程獲取鎖,發(fā)現(xiàn)鎖被占用,不斷進(jìn)行鎖請(qǐng)求,直到獲取。等待鎖的線程處于忙等狀態(tài)線程并會(huì)占用cpu資源;
- 互斥鎖 sleep-waiting(休眠狀態(tài)):線程獲取鎖,發(fā)現(xiàn)鎖被占用,就向系統(tǒng)申請(qǐng)鎖空閑時(shí)喚醒他并立刻休眠。等待鎖的線程處于休眠狀態(tài),并不會(huì)占用cpu資源;互斥鎖分為遞歸(可遞歸調(diào)用)、非遞歸;
- 特殊鎖讀寫鎖;
- OSSpinLock -- 自旋鎖 iOS10及以后棄用
- os_unfair_lock -- 互斥鎖 iOS10以后替代OSSpinLock使用
- NSLock -- 互斥鎖
- NSCondition -- 互斥鎖
- NSConditionLock -- 互斥鎖
- dispatch_semaphore -- 互斥鎖
- pthread_mutex -- 互斥鎖(可設(shè)置:遞歸)
- NSRecursiveLock -- 遞歸鎖
- @synchronized -- 遞歸鎖
pthread_rwlock讀寫鎖

image.png
NSLock、NSCondition、NSConditionLock、NSRecursiveLock的底層實(shí)現(xiàn)都是基于pthread_mutex;