iOS 鎖相關

死鎖

使用 sync 向當前串行隊列中添加任務,會卡住當前的串行隊列(產生死鎖)objective-c

OSSpinLock (自旋鎖)

High-level lock安全

自旋鎖再也不安全 等待鎖的線程會處於忙等狀態,一直佔用着CPU的資源markdown

可能會出現優先級反轉的問題併發

os_unfair_lock

從底層調用來看,等待 os_unfair_lock 鎖的線程處於休眠狀態,並不是忙等異步

pthread_mutex (互斥鎖)

須要銷燬async

互斥鎖 normal
遞歸鎖

條件鎖
pthread_cond_t

pthread_cond_wait

pthread_cond_signal
複製代碼

NSLock

對 pthread_mutex 默認封裝函數

NSRecursiveLock

NSCondition

對 NSConditionLock 和 NSCondition的封裝atom

waitspa

signal線程

SerialQueue

gcd 串行隊列

Semphore

@synthronized

互斥遞歸鎖

@synthronized(obj)  obj 傳遞進去 syncData(hashmap)一個 obj 對應一把鎖 (pmutext_lock) 
obj對應的遞歸鎖,而後進行加鎖、解鎖操做

進入SyncData的定義,是一個結構體,主要用來表示一個線程data,相似於鏈表結構,有next指向,且封裝了recursive_mutex_t屬性,能夠確認@synchronized確實是一個遞歸互斥鎖
複製代碼

自旋鎖和互斥鎖區別

自旋鎖 (不休眠)
預計線程等待鎖的時間很短
CPU資源不緊張

互斥鎖
預計等待鎖的時間較長
有IO操做
CPU資源緊張
複製代碼

讀寫安全

atomic 讀寫加鎖 可是 release 不加鎖

多讀單寫

pthread_rwlock : 讀寫鎖

等待的鎖 會進入休眠
複製代碼

dispatch_barrier_async:異步柵欄函數

queue 必須是本身手動建立的併發隊列
複製代碼
相關文章
相關標籤/搜索