使用 sync 向當前串行隊列中添加任務,會卡住當前的串行隊列(產生死鎖)objective-c
High-level lock安全
自旋鎖再也不安全 等待鎖的線程會處於忙等狀態,一直佔用着CPU的資源markdown
可能會出現優先級反轉的問題併發
從底層調用來看,等待 os_unfair_lock 鎖的線程處於休眠狀態,並不是忙等異步
須要銷燬async
pthread_cond_t
pthread_cond_wait
pthread_cond_signal
複製代碼
對 pthread_mutex 默認封裝函數
對 NSConditionLock 和 NSCondition的封裝atom
waitspa
signal線程
gcd 串行隊列
互斥遞歸鎖
@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 必須是本身手動建立的併發隊列
複製代碼