使用線程同步技術(同步是以預先確定的順序協調步伐),通用同步技術是鎖定的。
OSSpinLock被稱為“自旋鎖”,等待鎖的線程會處於忙等待狀態,壹直占用CPU資源。目前已經不安全,從iOS10開始已經棄用,可能會出現優先級反轉的問題。如果等待鎖的線程優先級較高,那麽它會壹直占用CPU資源,優先級較低的線程將無法釋放鎖,所以頭文件# import < lib kern/osatomic . h & gt;。
Os _ unfair _ lock用於替代不安全的OSSpinLock,僅從iOS10開始支持。從底層調用開始,等待os _ unfair _ lock的線程會休眠,不忙等。,所以頭文件# import
互斥體稱為“Mutex”,等待鎖的線程會處於休眠狀態,所以頭文件# import < pthread.h & gt
NSLock和NSRecursiveLock是互斥普通鎖的封裝,NSLock遵循NSLocking協議。
初始化鎖nslock * lock =[[nslock alloc]init];
NSRecursiveLock也是互斥遞歸鎖的封裝,API基本和NSLock壹樣。
NSCondition是互斥體和cond的封裝,NSCondition符合NSLocking協議。
NSCondition通常用於生產者-消費者模式的業務中。當條件不滿足時,調用wait方法讓消費線程等待,當條件滿足時,調用signal方法通知消費線程。
NSConditionLock是對NSCondition的進壹步封裝,可以設置具體的條件值。
NSConditionLock可以設置不同線程之間的依賴關系,讓滿足條件值的線程先執行,不滿足條件的線程處於等待狀態。
旗語叫“旗語”。信號量的初始值可以用來控制線程並發訪問的最大數量。信號量的初始值是1,也就是說同壹時間只允許1個線程訪問資源,保證線程同步。
@synchronized是互斥遞歸鎖的封裝。見源代碼:objc4中的文件objc-sync.mm,在@synchronized(obj)內部會生成obj對應的遞歸鎖,然後執行鎖和解鎖操作。
從高到低排序性能
調度_障礙_異步
Dispatch_barrier_async也叫柵欄函數。這個函數傳入的並發隊列必須通過dispatch _ queue _ crete自己創建。如果傳入壹個串行或全局並發隊列,這個函數相當於dispatch_async函數的效果。使用fence函數可以保證同壹時間只有壹個線程可以寫,有多少線程可以讀。